module Solargraph::LanguageServer::Host::Dispatch
Methods for associating sources with libraries via URIs.
Public Instance Methods
Find an explicit library match for the given URI. An explicit match means the libary's workspace includes the file.
If a matching library is found, the source corresponding to the URI gets attached to it.
@raise [FileNotFoundError] if the source could not be attached.
@param uri [String] @return [Library, nil]
# File lib/solargraph/language_server/host/dispatch.rb, line 59 def explicit_library_for uri filename = UriHelpers.uri_to_file(uri) libraries.each do |lib| if lib.contain?(filename) lib.attach sources.find(uri) if sources.include?(uri) return lib end end nil end
@return [Library]
# File lib/solargraph/language_server/host/dispatch.rb, line 105 def generic_library @generic_library ||= Solargraph::Library.new end
Get a generic library for the given URI and attach the corresponding source.
@raise [FileNotFoundError] if the source could not be attached.
@param uri [String] @return [Library]
# File lib/solargraph/language_server/host/dispatch.rb, line 99 def generic_library_for uri generic_library.attach sources.find(uri) generic_library end
Find an implicit library match for the given URI. An implicit match means the file is located inside the library's workspace directory, regardless of whether the workspace is configured to include it.
If a matching library is found, the source corresponding to the URI gets attached to it.
@raise [FileNotFoundError] if the source could not be attached.
@param uri [String] @return [Library, nil]
# File lib/solargraph/language_server/host/dispatch.rb, line 81 def implicit_library_for uri filename = UriHelpers.uri_to_file(uri) libraries.each do |lib| if filename.start_with?(lib.workspace.directory) lib.attach sources.find(uri) return lib end end nil end
@return [Array<Library>]
# File lib/solargraph/language_server/host/dispatch.rb, line 19 def libraries @libraries ||= [] end
Find the best libary match for the given URI.
@param uri [String] @return [Library]
# File lib/solargraph/language_server/host/dispatch.rb, line 40 def library_for uri result = explicit_library_for(uri) || implicit_library_for(uri) || generic_library_for(uri) # previous library for already call attach. avoid call twice # result.attach sources.find(uri) if sources.include?(uri) result end
@return [Sources]
# File lib/solargraph/language_server/host/dispatch.rb, line 10 def sources @sources ||= begin src = Sources.new src.add_observer self, :update_libraries src end end
The Sources
observer callback that merges a source into the host's libraries when it gets updated.
@param uri [String] @return [void]
# File lib/solargraph/language_server/host/dispatch.rb, line 28 def update_libraries uri src = sources.find(uri) libraries.each do |lib| lib.merge src if lib.contain?(src.filename) end diagnoser.schedule uri end