Module: MilkTea::LSP::Workspace::WorkspaceDefinitionIndex

Included in:
MilkTea::LSP::Workspace
Defined in:
lib/milk_tea/lsp/workspace/definition_index.rb

Instance Method Summary collapse

Instance Method Details

#find_definition_token_global(name, preferred_uri: nil, before_line: nil, before_char: nil) ⇒ Object

Find a definition token across the whole workspace, preferring preferred_uri. Returns { uri:, token: } or nil. Uses demand-driven name lookup to avoid cold full-workspace indexing.



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
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/milk_tea/lsp/workspace/definition_index.rb', line 10

def find_definition_token_global(name, preferred_uri: nil, before_line: nil, before_char: nil)
  # Check preferred_uri first without going through the index.
  if preferred_uri
    token = find_definition_token(preferred_uri, name, before_line:, before_char:)
    return { uri: preferred_uri, token: token } if token
  end

  entries = nil
  miss = false
  @definition_cache_mutex.synchronize do
    entries = @definition_index[name]&.dup
    miss = @definition_miss_cache.include?(name)
  end
  if entries
    entries.each do |entry|
      next if entry[:uri] == preferred_uri

      return entry
    end
  end

  return nil if miss

  candidate_definition_uris(name, exclude_uri: preferred_uri).each do |doc_uri|
    token = find_definition_token(doc_uri, name)
    next unless token

    entry = { uri: doc_uri, token: token }
    cache_definition_entry(name, entry)
    return entry
  end

  @definition_cache_mutex.synchronize do
    @definition_miss_cache << name
  end
  nil
end