Module: MilkTea::LSP::Workspace::WorkspaceDefinitionIndex
- Included in:
- MilkTea::LSP::Workspace
- Defined in:
- lib/milk_tea/lsp/workspace/definition_index.rb
Instance Method Summary collapse
-
#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.
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 |