diff --git a/.gitignore b/.gitignore index 243eb9ab..71239be2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ Gemfile.lock .bundle/ -vendor/ benchmark/ lib/linguist/samples.json diff --git a/.travis.yml b/.travis.yml index a964fa81..ac6800a7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ before_install: rvm: - 1.9.3 - 2.0.0 - - 2.1.1 + - 2.1 + - 2.2 notifications: disabled: true diff --git a/Gemfile b/Gemfile index 851fabc2..b92cab78 100644 --- a/Gemfile +++ b/Gemfile @@ -1,2 +1,3 @@ source 'https://rubygems.org' gemspec +gem 'test-unit', require: false if RUBY_VERSION >= '2.2' diff --git a/README.md b/README.md index 2950f269..94430f4d 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,8 @@ See [Linguist::Generated#generated?](https://github.com/github/linguist/blob/mas Linguist supports custom overrides for language definitions and vendored paths. Add a `.gitattributes` file to your project using the keys `linguist-language` and `linguist-vendored` with the standard git-style path matchers for the files you want to override. +Please note that the overrides currently only affect the language statistics for a repository and not the syntax-highlighting of files. + ``` $ cat .gitattributes *.rb linguist-language=Java diff --git a/Rakefile b/Rakefile index 8a044135..09fa0d8a 100644 --- a/Rakefile +++ b/Rakefile @@ -1,8 +1,8 @@ require 'bundler/setup' -require 'json' require 'rake/clean' require 'rake/testtask' require 'yaml' +require 'yajl' task :default => :test @@ -20,15 +20,13 @@ end task :samples do require 'linguist/samples' - require 'yajl' - data = Linguist::Samples.data - json = Yajl::Encoder.encode(data, :pretty => true) - File.open('lib/linguist/samples.json', 'w') { |io| io.write json } + json = Yajl.dump(Linguist::Samples.data, :pretty => true) + File.write 'lib/linguist/samples.json', json end task :build_gem => :samples do languages = YAML.load_file("lib/linguist/languages.yml") - File.write("lib/linguist/languages.json", JSON.dump(languages)) + File.write("lib/linguist/languages.json", Yajl.dump(languages)) `gem build github-linguist.gemspec` File.delete("lib/linguist/languages.json") end @@ -72,11 +70,11 @@ namespace :benchmark do reference_file = ENV["REFERENCE"] candidate_file = ENV["CANDIDATE"] - reference = JSON.parse(File.read(reference_file)) + reference = Yajl.load(File.read(reference_file)) reference_counts = Hash.new(0) reference.each { |filename, language| reference_counts[language] += 1 } - candidate = JSON.parse(File.read(candidate_file)) + candidate = Yajl.load(File.read(candidate_file)) candidate_counts = Hash.new(0) candidate.each { |filename, language| candidate_counts[language] += 1 } @@ -126,14 +124,12 @@ namespace :classifier do def each_public_gist require 'open-uri' - require 'json' - url = "https://api.github.com/gists/public" loop do resp = open(url) url = resp.meta['link'][/<([^>]+)>; rel="next"/, 1] - gists = JSON.parse(resp.read) + gists = Yajl.load(resp.read) for gist in gists for filename, attrs in gist['files'] diff --git a/github-linguist.gemspec b/github-linguist.gemspec index 6a06a6f2..4e918f30 100644 --- a/github-linguist.gemspec +++ b/github-linguist.gemspec @@ -19,7 +19,6 @@ Gem::Specification.new do |s| s.add_dependency 'pygments.rb', '~> 0.6.0' s.add_dependency 'rugged', '~> 0.21.1b2' - s.add_development_dependency 'json' s.add_development_dependency 'mocha' s.add_development_dependency 'pry' s.add_development_dependency 'rake' diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index e1b520b4..c7519881 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -28,6 +28,12 @@ module Linguist if languages.all? { |l| ["Hack", "PHP"].include?(l) } result = disambiguate_hack(data, languages) end + if languages.all? { |l| ["Scala", "SuperCollider"].include?(l) } + result = disambiguate_sc(data, languages) + end + if languages.all? { |l| ["AsciiDoc", "AGS Script"].include?(l) } + result = disambiguate_asc(data, languages) + end return result end end @@ -93,8 +99,28 @@ module Linguist def self.disambiguate_hack(data, languages) matches = [] - matches << Language["Hack"] if data.include?("' + Page,←⊂⍬,'' + Page,←⊂⍬,'' + Page,←⊂⍬,CoverageText + Page,←⊂⍬,'
' + Page,←ColorizedCode + Page,←⊂⍬,'' + Page,←Timestamp + Page,←⊂⍬,'