mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-12-08 04:18:48 +00:00
48 lines
1.1 KiB
Ruby
Executable File
48 lines
1.1 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
||
|
||
# linguist — detect language type for a file, or, given a directory
|
||
# determine language breakdown
|
||
#
|
||
# usage: linguist <path>
|
||
|
||
require 'linguist/file_blob'
|
||
require 'linguist/repository'
|
||
|
||
path = ARGV[0] || Dir.pwd
|
||
|
||
if File.directory?(path)
|
||
repo = Linguist::Repository.from_directory(path)
|
||
repo.languages.sort_by { |_, size| size }.reverse.each do |language, size|
|
||
percentage = ((size / repo.size.to_f) * 100).round
|
||
puts "%-4s %s" % ["#{percentage}%", language]
|
||
end
|
||
elsif File.file?(path)
|
||
blob = Linguist::FileBlob.new(path, Dir.pwd)
|
||
type = if blob.text?
|
||
'Text'
|
||
elsif blob.image?
|
||
'Image'
|
||
else
|
||
'Binary'
|
||
end
|
||
|
||
puts "#{blob.name}: #{blob.loc} lines (#{blob.sloc} sloc)"
|
||
puts " type: #{type}"
|
||
puts " mime type: #{blob.mime_type}"
|
||
puts " language: #{blob.language}"
|
||
|
||
if blob.large?
|
||
puts " blob is too large to be shown"
|
||
end
|
||
|
||
if blob.generated?
|
||
puts " appears to be generated source code"
|
||
end
|
||
|
||
if blob.vendored?
|
||
puts " appears to be a vendored file"
|
||
end
|
||
else
|
||
abort "usage: linguist <path>"
|
||
end
|