aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts/linters/no_format_trailing_comma.rb
blob: 3e474a7660ef8189a3143c1c8f66aa4709a42c6d (plain)
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
def no_format_trailing_comma(root_dir, excludes = [])
  crates_dir = root_dir.join('crates')
  raw = `grep -rn --include='*.rs' -e ',)' #{crates_dir}`

  errors = []
  raw.each_line do |line|
    line = line.chomp
    path, lineno, content = line.split(':', 3)
    next if content.nil?

    relative = Pathname.new(path).relative_path_from(root_dir).to_s
    next if excludes.include?(relative)

    # `(,)` is a macro repetition fragment (e.g. `$(,)?`).
    next if content.match?(/\(,\)/)

    errors << "#{relative}:#{lineno}: trailing `,)` before a closing paren"
  end

  return true if errors.empty?

  puts 'Found `,)` introduced by formatting. Remove it.'
  errors.each do |err|
    puts "  #{err}"
  end
  false
end