Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-10-20 03:11:14 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-10-20 03:11:14 +0300
commit1533e64a2ca36d119ba2f229f591e4b50c436338 (patch)
tree36ff2c216e0b899189207f760a8d58396a87a54d /tooling
parentb6bf52d3e274bd060a7b7e7a2812fda30e0d66d5 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'tooling')
-rw-r--r--tooling/danger/outdated_todo.rb58
1 files changed, 58 insertions, 0 deletions
diff --git a/tooling/danger/outdated_todo.rb b/tooling/danger/outdated_todo.rb
new file mode 100644
index 00000000000..a5f5cc897a9
--- /dev/null
+++ b/tooling/danger/outdated_todo.rb
@@ -0,0 +1,58 @@
+# frozen_string_literal: true
+
+module Tooling
+ module Danger
+ class OutdatedTodo
+ TODOS_GLOBS = %w[
+ .rubocop_todo/**/*.yml
+ spec/support/rspec_order_todo.yml
+ ].freeze
+
+ def initialize(filenames, context:, todos: TODOS_GLOBS)
+ @filenames = filenames
+ @context = context
+ @todos_globs = todos
+ end
+
+ def check
+ filenames.each do |filename|
+ check_filename(filename)
+ end
+ end
+
+ private
+
+ attr_reader :filenames, :context
+
+ def check_filename(filename)
+ mentions = all_mentions_for(filename)
+
+ return if mentions.empty?
+
+ context.warn <<~MESSAGE
+ `#{filename}` was removed but is mentioned in:
+ #{mentions.join("\n")}
+ MESSAGE
+ end
+
+ def all_mentions_for(filename)
+ todos
+ .filter_map { |todo| mentioned_lines(filename, todo) }
+ .flatten
+ .map { |todo| "- `#{todo}`" }
+ end
+
+ def mentioned_lines(filename, todo)
+ File
+ .foreach(todo)
+ .with_index(1)
+ .select { |text, _line| text.match?(/.*#{filename}.*/) }
+ .map { |_text, line| "#{todo}:#{line}" }
+ end
+
+ def todos
+ @todos ||= @todos_globs.flat_map { |value| Dir.glob(value) }
+ end
+ end
+ end
+end