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 'app/services/projects/lsif_data_service.rb')
-rw-r--r--app/services/projects/lsif_data_service.rb101
1 files changed, 0 insertions, 101 deletions
diff --git a/app/services/projects/lsif_data_service.rb b/app/services/projects/lsif_data_service.rb
deleted file mode 100644
index 5e7055b3309..00000000000
--- a/app/services/projects/lsif_data_service.rb
+++ /dev/null
@@ -1,101 +0,0 @@
-# frozen_string_literal: true
-
-module Projects
- class LsifDataService
- attr_reader :file, :project, :commit_id, :docs,
- :doc_ranges, :ranges, :def_refs, :hover_refs
-
- CACHE_EXPIRE_IN = 1.hour
-
- def initialize(file, project, commit_id)
- @file = file
- @project = project
- @commit_id = commit_id
-
- fetch_data!
- end
-
- def execute(path)
- doc_id = find_doc_id(docs, path)
- dir_absolute_path = docs[doc_id]&.delete_suffix(path)
-
- doc_ranges[doc_id]&.map do |range_id|
- location, ref_id = ranges[range_id].values_at('loc', 'ref_id')
- line_data, column_data = location
-
- {
- start_line: line_data.first,
- end_line: line_data.last,
- start_char: column_data.first,
- end_char: column_data.last,
- definition_url: definition_url_for(def_refs[ref_id], dir_absolute_path),
- hover: highlighted_hover(hover_refs[ref_id])
- }
- end
- end
-
- private
-
- def fetch_data
- Rails.cache.fetch("project:#{project.id}:lsif:#{commit_id}", expires_in: CACHE_EXPIRE_IN) do
- data = nil
-
- file.open do |stream|
- Zlib::GzipReader.wrap(stream) do |gz_stream|
- data = Gitlab::Json.parse(gz_stream.read)
- end
- end
-
- data
- end
- end
-
- def fetch_data!
- data = fetch_data
-
- @docs = data['docs']
- @doc_ranges = data['doc_ranges']
- @ranges = data['ranges']
- @def_refs = data['def_refs']
- @hover_refs = data['hover_refs']
- end
-
- def find_doc_id(docs, path)
- docs.reduce(nil) do |doc_id, (id, doc_path)|
- next doc_id unless doc_path =~ /#{path}$/
-
- if doc_id.nil? || docs[doc_id].size > doc_path.size
- doc_id = id
- end
-
- doc_id
- end
- end
-
- def definition_url_for(ref_id, dir_absolute_path)
- return unless range = ranges[ref_id]
-
- def_doc_id, location = range.values_at('doc_id', 'loc')
- localized_doc_url = docs[def_doc_id].delete_prefix(dir_absolute_path)
-
- # location is stored as [[start_line, end_line], [start_char, end_char]]
- start_line = location.first.first
-
- line_anchor = "L#{start_line + 1}"
- definition_ref_path = [commit_id, localized_doc_url].join('/')
-
- Gitlab::Routing.url_helpers.project_blob_path(project, definition_ref_path, anchor: line_anchor)
- end
-
- def highlighted_hover(hovers)
- hovers&.map do |hover|
- # Documentation for a method which is added as comments on top of the method
- # is stored as a raw string value in LSIF file
- next { value: hover } unless hover.is_a?(Hash)
-
- value = Gitlab::Highlight.highlight(nil, hover['value'], language: hover['language'])
- { language: hover['language'], value: value }
- end
- end
- end
-end