~james/gengo

gengo/scripts/conflicts.rb -rwxr-xr-x 1.0 KiB
50871857 — james chore(import): snapshot james.dad.town/gengo at 8f775550b0ee 14 hours ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env ruby
require 'yaml'

if ARGV.empty?
  warn "Usage: #{$PROGRAM_NAME} <languages.yaml>"
  exit 1
end

LANGUAGES = YAML.load_file(ARGV[0])

extensions = Hash.new { |h, k| h[k] = [] }
filenames = Hash.new { |h, k| h[k] = [] }
interpreters = Hash.new { |h, k| h[k] = [] }

LANGUAGES.each do |language, info|
  next if info['heuristics']&.any?

  # TODO: Check for conflicting regexes?
  matchers = info['matchers']
  matchers['extensions']&.each do |ext|
    extensions[ext] << language
  end
  matchers['filenames']&.each do |filename|
    filenames[filename] << language
  end
  matchers['interpreters']&.each do |interpreter|
    interpreters[interpreter] << language
  end
end

extensions.each do |ext, langs|
  puts "Extension #{ext} is used by #{langs.join(', ')}" if langs.size > 1
end

filenames.each do |filename, langs|
  puts "Filename #{filename} is used by #{langs.join(', ')}" if langs.size > 1
end

interpreters.each do |interpreter, langs|
  puts "Interpreter #{interpreter} is used by #{langs.join(', ')}" if langs.size > 1
end