blob: 4d6fe366333e3bc55a5755bbb3e76b797ef4b7ea (
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
28
29
30
31
32
33
34
|
# frozen_string_literal: true
module Gitlab
module DependencyLinker
class GoModLinker < BaseLinker
include Gitlab::Golang
self.file_type = :go_mod
private
SEMVER = Gitlab::Regex.unbounded_semver_regex
NAME = Gitlab::Regex.go_package_regex
REGEX = Regexp.new("(?<name>#{NAME.source})(?:\\s+(?<version>v#{SEMVER.source}))?", SEMVER.options | NAME.options).freeze
# rubocop: disable CodeReuse/ActiveRecord
def link_dependencies
highlighted_lines.map!.with_index do |rich_line, i|
plain_line = plain_lines[i].chomp
match = REGEX.match(plain_line)
next rich_line unless match
i, j = match.offset(:name)
marker = StringRangeMarker.new(plain_line, rich_line.html_safe)
marker.mark([i..(j - 1)]) do |text, left:, right:|
url = package_url(text, match[:version])
url ? link_tag(text, url) : text
end
end
end
# rubocop: enable CodeReuse/ActiveRecord
end
end
end
|