mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Remove .script! hack
This commit is contained in:
		| @@ -541,7 +541,7 @@ module Linguist | |||||||
|     if extnames = extensions[name] |     if extnames = extensions[name] | ||||||
|       extnames.each do |extname| |       extnames.each do |extname| | ||||||
|         if !options['extensions'].index { |x| x.downcase.end_with? extname.downcase } |         if !options['extensions'].index { |x| x.downcase.end_with? extname.downcase } | ||||||
|           warn "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" unless extname == '.script!' |           warn "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" | ||||||
|           options['extensions'] << extname |           options['extensions'] << extname | ||||||
|         end |         end | ||||||
|       end |       end | ||||||
|   | |||||||
| @@ -50,16 +50,13 @@ module Linguist | |||||||
|             end |             end | ||||||
|           else |           else | ||||||
|             path = File.join(dirname, filename) |             path = File.join(dirname, filename) | ||||||
|  |             extname = File.extname(filename) | ||||||
|             if File.extname(filename) == "" |  | ||||||
|               raise "#{path} is missing an extension, maybe it belongs in filenames/ subdir" |  | ||||||
|             end |  | ||||||
|  |  | ||||||
|             yield({ |             yield({ | ||||||
|               :path     => path, |               :path     => path, | ||||||
|               :language => category, |               :language => category, | ||||||
|               :interpreter => Shebang.interpreter(File.read(path)), |               :interpreter => Shebang.interpreter(File.read(path)), | ||||||
|               :extname  => File.extname(filename) |               :extname  => extname.empty? ? nil : extname | ||||||
|             }) |             }) | ||||||
|           end |           end | ||||||
|         end |         end | ||||||
|   | |||||||
| @@ -3,17 +3,7 @@ module Linguist | |||||||
|     # Detects language based on filename and/or extension |     # Detects language based on filename and/or extension | ||||||
|     class Filename |     class Filename | ||||||
|       def self.call(blob, _) |       def self.call(blob, _) | ||||||
|         name = blob.name.to_s |         Language.find_by_filename(blob.name.to_s) | ||||||
|  |  | ||||||
|         # A bit of an elegant hack. If the file is executable but extensionless, |  | ||||||
|         # append a "magic" extension so it can be classified with other |  | ||||||
|         # languages that have shebang scripts. |  | ||||||
|         extensions = FileBlob.new(name).extensions |  | ||||||
|         if extensions.empty? && blob.mode && (blob.mode.to_i(8) & 05) == 05 |  | ||||||
|           name += ".script!" |  | ||||||
|         end |  | ||||||
|  |  | ||||||
|         Language.find_by_filename(name) |  | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|   | |||||||
| @@ -1,17 +0,0 @@ | |||||||
| task echoDirListViaAntBuilder() { |  | ||||||
|     description = 'Uses the built-in AntBuilder instance to echo and list files' |  | ||||||
|     //Docs: http://ant.apache.org/manual/Types/fileset.html |  | ||||||
|      |  | ||||||
|     //Echo the Gradle project name via the ant echo plugin |  | ||||||
|     ant.echo(message: project.name) |  | ||||||
|     ant.echo(path) |  | ||||||
|     ant.echo("${projectDir}/samples") |  | ||||||
|      |  | ||||||
|     //Gather list of files in a subdirectory |  | ||||||
|     ant.fileScanner{ |  | ||||||
|         fileset(dir:"samples") |  | ||||||
|     }.each{ |  | ||||||
|         //Print each file to screen with the CWD (projectDir) path removed. |  | ||||||
|         println it.toString() - "${projectDir}" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -34,6 +34,14 @@ class TestSamples < Minitest::Test | |||||||
|     assert !data["interpreters"].empty? |     assert !data["interpreters"].empty? | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   def test_ext_or_shebang | ||||||
|  |     Samples.each do |sample| | ||||||
|  |       if sample[:extname].to_s.empty? && !sample[:filename] | ||||||
|  |         assert sample[:interpreter], "#{sample[:path]} should have a file extension or a shebang, maybe it belongs in filenames/ subdir" | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |  | ||||||
|   # Check that there aren't samples with extensions or interpreters that |   # Check that there aren't samples with extensions or interpreters that | ||||||
|   # aren't explicitly defined in languages.yml |   # aren't explicitly defined in languages.yml | ||||||
|   languages_yml = File.expand_path("../../lib/linguist/languages.yml", __FILE__) |   languages_yml = File.expand_path("../../lib/linguist/languages.yml", __FILE__) | ||||||
| @@ -42,7 +50,6 @@ class TestSamples < Minitest::Test | |||||||
|       options['extensions'] ||= [] |       options['extensions'] ||= [] | ||||||
|       if extnames = Samples.cache['extnames'][name] |       if extnames = Samples.cache['extnames'][name] | ||||||
|         extnames.each do |extname| |         extnames.each do |extname| | ||||||
|           next if extname == '.script!' |  | ||||||
|           assert options['extensions'].index { |x| x.downcase.end_with? extname.downcase }, "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" |           assert options['extensions'].index { |x| x.downcase.end_with? extname.downcase }, "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" | ||||||
|         end |         end | ||||||
|       end |       end | ||||||
| @@ -50,8 +57,8 @@ class TestSamples < Minitest::Test | |||||||
|       options['interpreters'] ||= [] |       options['interpreters'] ||= [] | ||||||
|       if interpreters = Samples.cache['interpreters'][name] |       if interpreters = Samples.cache['interpreters'][name] | ||||||
|         interpreters.each do |interpreter| |         interpreters.each do |interpreter| | ||||||
|           # next if extname == '.script!' |           assert options['interpreters'].include?(interpreter), | ||||||
|           assert options['interpreters'].include?(interpreter), "#{name} has a sample with an interpreter (#{interpreter}) that isn't explicitly defined in languages.yml" |             "#{name} has a sample with an interpreter (#{interpreter}) that isn't explicitly defined in languages.yml" | ||||||
|         end |         end | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
|   | |||||||
| @@ -84,16 +84,16 @@ class TestTokenizer < Minitest::Test | |||||||
|   end |   end | ||||||
|  |  | ||||||
|   def test_shebang |   def test_shebang | ||||||
|     assert_equal "SHEBANG#!sh", tokenize(:"Shell/sh.script!")[0] |     assert_equal "SHEBANG#!sh", tokenize(:"Shell/sh")[0] | ||||||
|     assert_equal "SHEBANG#!bash", tokenize(:"Shell/bash.script!")[0] |     assert_equal "SHEBANG#!bash", tokenize(:"Shell/bash")[0] | ||||||
|     assert_equal "SHEBANG#!zsh", tokenize(:"Shell/zsh.script!")[0] |     assert_equal "SHEBANG#!zsh", tokenize(:"Shell/zsh")[0] | ||||||
|     assert_equal "SHEBANG#!perl", tokenize(:"Perl/perl.script!")[0] |     assert_equal "SHEBANG#!perl", tokenize(:"Perl/perl")[0] | ||||||
|     assert_equal "SHEBANG#!python", tokenize(:"Python/python.script!")[0] |     assert_equal "SHEBANG#!python", tokenize(:"Python/python")[0] | ||||||
|     assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby.script!")[0] |     assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby")[0] | ||||||
|     assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2.script!")[0] |     assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2")[0] | ||||||
|     assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js.script!")[0] |     assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js")[0] | ||||||
|     assert_equal "SHEBANG#!php", tokenize(:"PHP/php.script!")[0] |     assert_equal "SHEBANG#!php", tokenize(:"PHP/php")[0] | ||||||
|     assert_equal "SHEBANG#!escript", tokenize(:"Erlang/factorial.script!")[0] |     assert_equal "SHEBANG#!escript", tokenize(:"Erlang/factorial")[0] | ||||||
|     assert_equal "echo", tokenize(:"Shell/invalid-shebang.sh")[0] |     assert_equal "echo", tokenize(:"Shell/invalid-shebang.sh")[0] | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user