mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-12-08 12:28:47 +00:00
Merge branch 'master' into saltstack-states
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,3 +4,4 @@ benchmark/
|
|||||||
lib/linguist/samples.json
|
lib/linguist/samples.json
|
||||||
/grammars
|
/grammars
|
||||||
/node_modules
|
/node_modules
|
||||||
|
test/fixtures/ace_modes.json
|
||||||
|
|||||||
19
Rakefile
19
Rakefile
@@ -3,13 +3,14 @@ require 'rake/clean'
|
|||||||
require 'rake/testtask'
|
require 'rake/testtask'
|
||||||
require 'yaml'
|
require 'yaml'
|
||||||
require 'yajl'
|
require 'yajl'
|
||||||
|
require 'open-uri'
|
||||||
|
|
||||||
task :default => :test
|
task :default => :test
|
||||||
|
|
||||||
Rake::TestTask.new
|
Rake::TestTask.new
|
||||||
|
|
||||||
# Extend test task to check for samples
|
# Extend test task to check for samples and fetch latest Ace modes
|
||||||
task :test => :check_samples
|
task :test => [:check_samples, :fetch_ace_modes]
|
||||||
|
|
||||||
desc "Check that we have samples.json generated"
|
desc "Check that we have samples.json generated"
|
||||||
task :check_samples do
|
task :check_samples do
|
||||||
@@ -18,6 +19,20 @@ task :check_samples do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
desc "Fetch the latest Ace modes from its GitHub repository"
|
||||||
|
task :fetch_ace_modes do
|
||||||
|
ACE_FIXTURE_PATH = File.join('test', 'fixtures', 'ace_modes.json')
|
||||||
|
|
||||||
|
File.delete(ACE_FIXTURE_PATH) if File.exist?(ACE_FIXTURE_PATH)
|
||||||
|
|
||||||
|
begin
|
||||||
|
ace_github_modes = open("https://api.github.com/repos/ajaxorg/ace/contents/lib/ace/mode").read
|
||||||
|
File.write(ACE_FIXTURE_PATH, ace_github_modes)
|
||||||
|
rescue OpenURI::HTTPError, SocketError
|
||||||
|
# no internet? no problem.
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
task :samples do
|
task :samples do
|
||||||
require 'linguist/samples'
|
require 'linguist/samples'
|
||||||
json = Yajl.dump(Linguist::Samples.data, :pretty => true)
|
json = Yajl.dump(Linguist::Samples.data, :pretty => true)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -469,7 +469,7 @@ class TestBlob < Test::Unit::TestCase
|
|||||||
# Test language detection for files which shouldn't be used as samples
|
# Test language detection for files which shouldn't be used as samples
|
||||||
root = File.expand_path('../fixtures', __FILE__)
|
root = File.expand_path('../fixtures', __FILE__)
|
||||||
Dir.entries(root).each do |language|
|
Dir.entries(root).each do |language|
|
||||||
next if language == '.' || language == '..'
|
next if language == '.' || language == '..' || File.basename(language) == 'ace_modes.json'
|
||||||
|
|
||||||
# Each directory contains test files of a language
|
# Each directory contains test files of a language
|
||||||
dirname = File.join(root, language)
|
dirname = File.join(root, language)
|
||||||
|
|||||||
@@ -308,11 +308,11 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
assert_equal 'css', Language['CSS'].ace_mode
|
assert_equal 'css', Language['CSS'].ace_mode
|
||||||
assert_equal 'lsl', Language['LSL'].ace_mode
|
assert_equal 'lsl', Language['LSL'].ace_mode
|
||||||
assert_equal 'javascript', Language['JavaScript'].ace_mode
|
assert_equal 'javascript', Language['JavaScript'].ace_mode
|
||||||
|
assert_equal 'none', Language['FORTRAN'].ace_mode
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_ace_modes
|
def test_ace_modes
|
||||||
assert Language.ace_modes.include?(Language['Ruby'])
|
assert Language.ace_modes.include?(Language['Ruby'])
|
||||||
assert !Language.ace_modes.include?(Language['FORTRAN'])
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_wrap
|
def test_wrap
|
||||||
@@ -356,4 +356,22 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
message << missing.map { |language| sprintf("%-#{width}s %s", language.name, language.tm_scope) }.sort.join("\n")
|
message << missing.map { |language| sprintf("%-#{width}s %s", language.name, language.tm_scope) }.sort.join("\n")
|
||||||
assert missing.empty?, message
|
assert missing.empty?, message
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_all_languages_have_a_valid_ace_mode
|
||||||
|
ace_fixture_path = File.join('test', 'fixtures', 'ace_modes.json')
|
||||||
|
skip("No ace_modes.json file") unless File.exist?(ace_fixture_path)
|
||||||
|
|
||||||
|
ace_github_modes = Yajl.load(File.read(ace_fixture_path))
|
||||||
|
existing_ace_modes = ace_github_modes.map do |ace_github_mode|
|
||||||
|
File.basename(ace_github_mode["name"], ".js") if ace_github_mode["name"] !~ /_highlight_rules|_test|_worker/
|
||||||
|
end.compact.uniq.sort.map(&:downcase)
|
||||||
|
|
||||||
|
missing = Language.all.reject { |language| language.ace_mode == "none" || existing_ace_modes.include?(language.ace_mode) }
|
||||||
|
message = "The following languages do not have an Ace mode listed in languages.yml. Please add an Ace mode for all new languages.\n"
|
||||||
|
message << "If no Ace mode exists for a language, mark the language with `ace_mode: none` in lib/linguist/languages.yml.\n"
|
||||||
|
|
||||||
|
width = missing.map { |language| language.name.length }.max
|
||||||
|
message << missing.map { |language| sprintf("%-#{width}s %s", language.name, language.ace_mode) }.sort.join("\n")
|
||||||
|
assert missing.empty?, message
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user