From c2e5065ce11cb773a06394b41c80b14bb9573078 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Wed, 11 May 2011 12:49:51 -0500 Subject: [PATCH] Add list of popular languages --- lib/linguist/language.rb | 26 +++++++++++++++++++++++++- lib/linguist/popular.yml | 25 +++++++++++++++++++++++++ test/test_language.rb | 8 ++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 lib/linguist/popular.yml diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index f7286f01..d8659eac 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -43,6 +43,14 @@ module Linguist @lexer_index.to_a end + def self.popular + @name_index.values.select(&:popular?).sort_by { |lang| lang.name.downcase } + end + + def self.unpopular + @name_index.values.select(&:unpopular?).sort_by { |lang| lang.name.downcase } + end + def self.lexer2name(lexer) if language = find_by_lexer(lexer) language.name @@ -59,6 +67,7 @@ module Linguist @name = attributes[:name] || raise(ArgumentError, "missing name") @lexer = attributes[:lexer] || default_lexer @extensions = attributes[:extensions] || [] + @popular = attributes[:popular] || false end attr_reader :name, :lexer, :extensions @@ -71,6 +80,14 @@ module Linguist lexer == default_lexer end + def popular? + @popular + end + + def unpopular? + !popular? + end + def ==(other) eql?(other) end @@ -80,7 +97,14 @@ module Linguist end end + popular = YAML.load_file(File.expand_path("../popular.yml", __FILE__)) + YAML.load_file(File.expand_path("../extensions.yml", __FILE__)).each do |name, options| - Language.create(:name => name, :lexer => options[:lexer], :extensions => options[:ext]) + Language.create( + :name => name, + :lexer => options[:lexer], + :extensions => options[:ext], + :popular => popular.include?(name) + ) end end diff --git a/lib/linguist/popular.yml b/lib/linguist/popular.yml new file mode 100644 index 00000000..b6e10491 --- /dev/null +++ b/lib/linguist/popular.yml @@ -0,0 +1,25 @@ +- ActionScript +- Bash +- C +- Common Lisp +- C# +- C++ +- CSS +- Diff +- Emacs Lisp +- Erlang +- Haskell +- HTML +- Java +- JavaScript +- Lua +- Objective-C +- Perl +- PHP +- Python +- Ruby +- Scala +- Scheme +- SQL +- TeX +- XML diff --git a/test/test_language.rb b/test/test_language.rb index 9f6f1359..e7fd8fcf 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -73,4 +73,12 @@ class TestLanguage < Test::Unit::TestCase assert !Language['Ruby'].eql?(Language['Python']) assert !Language['Ruby'].eql?(Language.new(:name => 'Ruby')) end + + def test_popular + assert Language['Ruby'].popular? + assert Language['Perl'].popular? + assert Language['Python'].popular? + assert Language['Assembly'].unpopular? + assert Language['Brainfuck'].unpopular? + end end