Class: Dependabot::PullRequestCreator::MessageBuilder::LinkAndMentionSanitizer
- Inherits:
-
Object
- Object
- Dependabot::PullRequestCreator::MessageBuilder::LinkAndMentionSanitizer
- Defined in:
- lib/dependabot/pull_request_creator/message_builder/link_and_mention_sanitizer.rb
Constant Summary collapse
- GITHUB_USERNAME =
/[a-z0-9]+(-[a-z0-9]+)*/i.freeze
- GITHUB_REF_REGEX =
%r{ (?:https?://)? github\.com/(?<repo>#{GITHUB_USERNAME}/[^/\s]+)/ (?:issue|pull)s?/(?<number>\d+) }x.freeze
- CODEBLOCK_REGEX =
rubocop:disable Metrics/LineLength Context:
- https://github.github.com/gfm/#fenced-code-block (``` or ~~~)
(?<=\n|^) Positive look-behind to ensure we start at a line start
(?>`3,|~3,) Atomic group marking the beginning of the block (3 or more chars)
(?>\k
) Atomic group marking the end of the code block (same length as opening) - https://github.github.com/gfm/#code-span
(?
+) Capturing group marking the beginning of the span (1 or more chars) (?![^]?\n{2,}) Negative look-ahead to avoid empty lines inside code span (?:.|\n)? Non-capturing group to consume code span content (non-eager) (?>\k) Atomic group marking the end of the code span (same length as opening) rubocop:enable Metrics/LineLength
- https://github.github.com/gfm/#fenced-code-block (``` or ~~~)
(?<=\n|^) Positive look-behind to ensure we start at a line start
(?>`3,|~3,) Atomic group marking the beginning of the block (3 or more chars)
(?>\k
/ # fenced code block (?<=\n|^)(?<fenceopen>(?>`{3,}|~{3,})).*?(?>\k<fenceopen>)| # code span (?<codespanopen>`+)(?![^`]*?\n{2,})(?:.|\n)*?(?>\k<codespanopen>) /xm.freeze
- EOS_REGEX =
End of string
/\z/.freeze
Instance Attribute Summary collapse
-
#github_redirection_service ⇒ Object
readonly
Returns the value of attribute github_redirection_service.
Instance Method Summary collapse
-
#initialize(github_redirection_service:) ⇒ LinkAndMentionSanitizer
constructor
A new instance of LinkAndMentionSanitizer.
- #sanitize_links_and_mentions(text:) ⇒ Object
Constructor Details
#initialize(github_redirection_service:) ⇒ LinkAndMentionSanitizer
Returns a new instance of LinkAndMentionSanitizer.
39 40 41 |
# File 'lib/dependabot/pull_request_creator/message_builder/link_and_mention_sanitizer.rb', line 39 def initialize(github_redirection_service:) @github_redirection_service = github_redirection_service end |
Instance Attribute Details
#github_redirection_service ⇒ Object (readonly)
Returns the value of attribute github_redirection_service.
37 38 39 |
# File 'lib/dependabot/pull_request_creator/message_builder/link_and_mention_sanitizer.rb', line 37 def github_redirection_service @github_redirection_service end |
Instance Method Details
#sanitize_links_and_mentions(text:) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/dependabot/pull_request_creator/message_builder/link_and_mention_sanitizer.rb', line 43 def sanitize_links_and_mentions(text:) # We don't want to sanitize any links or mentions that are contained # within code blocks, so we split the text on "```" or "~~~" sanitized_text = [] scan = StringScanner.new(text) until scan.eos? block = scan.scan_until(CODEBLOCK_REGEX) || scan.scan_until(EOS_REGEX) sanitized_text << sanitize_links_and_mentions_in_block(block) end sanitized_text.join end |