mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.6 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> [<--breakdown>]
 | 
						|
#
 | 
						|
require 'linguist'
 | 
						|
require 'rugged'
 | 
						|
 | 
						|
path = ARGV[0] || Dir.pwd
 | 
						|
 | 
						|
# special case if not given a directory but still given the --breakdown option
 | 
						|
if path == "--breakdown"
 | 
						|
  path = Dir.pwd
 | 
						|
  breakdown = true
 | 
						|
end
 | 
						|
 | 
						|
ARGV.shift
 | 
						|
breakdown = true if ARGV[0] == "--breakdown"
 | 
						|
 | 
						|
if File.directory?(path)
 | 
						|
  rugged = Rugged::Repository.new(path)
 | 
						|
  repo = Linguist::Repository.new(rugged, rugged.head.target_id)
 | 
						|
  repo.languages.sort_by { |_, size| size }.reverse.each do |language, size|
 | 
						|
    percentage = ((size / repo.size.to_f) * 100)
 | 
						|
    percentage = sprintf '%.2f' % percentage
 | 
						|
    puts "%-7s %s" % ["#{percentage}%", language]
 | 
						|
  end
 | 
						|
  if breakdown
 | 
						|
    puts
 | 
						|
    file_breakdown = repo.breakdown_by_file
 | 
						|
    file_breakdown.each do |lang, files|
 | 
						|
      puts "#{lang}:"
 | 
						|
      files.each do |file|
 | 
						|
        puts file
 | 
						|
      end
 | 
						|
      puts
 | 
						|
    end
 | 
						|
  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
 |