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:
Diffstat (limited to 'lib/gitlab/github_import/representation/diff_notes/suggestion_formatter.rb')
-rw-r--r--lib/gitlab/github_import/representation/diff_notes/suggestion_formatter.rb34
1 files changed, 19 insertions, 15 deletions
diff --git a/lib/gitlab/github_import/representation/diff_notes/suggestion_formatter.rb b/lib/gitlab/github_import/representation/diff_notes/suggestion_formatter.rb
index 4e5855ee4cd..38b15c4b5bb 100644
--- a/lib/gitlab/github_import/representation/diff_notes/suggestion_formatter.rb
+++ b/lib/gitlab/github_import/representation/diff_notes/suggestion_formatter.rb
@@ -10,30 +10,38 @@ module Gitlab
module Representation
module DiffNotes
class SuggestionFormatter
+ include Gitlab::Utils::StrongMemoize
+
# A github suggestion:
# - the ```suggestion tag must be the first text of the line
# - it might have up to 3 spaces before the ```suggestion tag
# - extra text on the ```suggestion tag line will be ignored
GITHUB_SUGGESTION = /^\ {,3}(?<suggestion>```suggestion\b).*(?<eol>\R)/.freeze
- def self.formatted_note_for(...)
- new(...).formatted_note
- end
-
def initialize(note:, start_line: nil, end_line: nil)
@note = note
@start_line = start_line
@end_line = end_line
end
+ # Returns a tuple with:
+ # - a boolean indicating if the note has suggestions
+ # - the note with the suggestion formatted for Gitlab
def formatted_note
- if contains_suggestion?
- note.gsub(
- GITHUB_SUGGESTION,
- "\\k<suggestion>:#{suggestion_range}\\k<eol>"
- )
- else
- note
+ @formatted_note ||=
+ if contains_suggestion?
+ note.gsub(
+ GITHUB_SUGGESTION,
+ "\\k<suggestion>:#{suggestion_range}\\k<eol>"
+ )
+ else
+ note
+ end
+ end
+
+ def contains_suggestion?
+ strong_memoize(:contain_suggestion) do
+ note.to_s.match?(GITHUB_SUGGESTION)
end
end
@@ -41,10 +49,6 @@ module Gitlab
attr_reader :note, :start_line, :end_line
- def contains_suggestion?
- note.to_s.match?(GITHUB_SUGGESTION)
- end
-
# Github always saves the comment on the _last_ line of the range.
# Therefore, the diff hunk will always be related to lines before
# the comment itself.