aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts/linters/no_format_trailing_comma.rb
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-28 17:45:06 +0900
committernsfisis <nsfisis@gmail.com>2026-06-28 17:45:26 +0900
commit53f1fb395f33e0fb8db9aebd09ea9082f650f9f1 (patch)
treef9e8bf0e9d4b1e98cce383574fb6a13b684fff08 /scripts/linters/no_format_trailing_comma.rb
parent212f5cd75b1403ee75ffa44d7ebdb181174340c0 (diff)
downloadphp-shirabe-53f1fb395f33e0fb8db9aebd09ea9082f650f9f1.tar.gz
php-shirabe-53f1fb395f33e0fb8db9aebd09ea9082f650f9f1.tar.zst
php-shirabe-53f1fb395f33e0fb8db9aebd09ea9082f650f9f1.zip
refactor: add linter
Diffstat (limited to 'scripts/linters/no_format_trailing_comma.rb')
-rw-r--r--scripts/linters/no_format_trailing_comma.rb27
1 files changed, 27 insertions, 0 deletions
diff --git a/scripts/linters/no_format_trailing_comma.rb b/scripts/linters/no_format_trailing_comma.rb
new file mode 100644
index 0000000..3e474a7
--- /dev/null
+++ b/scripts/linters/no_format_trailing_comma.rb
@@ -0,0 +1,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