Module: Solargraph::LanguageServer::Host::Dispatch
- Included in:
- Solargraph::LanguageServer::Host
- Defined in:
- lib/solargraph/language_server/host/dispatch.rb
Overview
Methods for associating sources with libraries via URIs.
Instance Method Summary collapse
-
#explicit_library_for(uri) ⇒ Library?
Find an explicit library match for the given URI.
- #generic_library ⇒ Library
-
#generic_library_for(uri) ⇒ Library
Get a generic library for the given URI and attach the corresponding source.
-
#implicit_library_for(uri) ⇒ Library?
Find an implicit library match for the given URI.
- #libraries ⇒ Array<Library>
-
#library_for(uri) ⇒ Library
Find the best libary match for the given URI.
- #sources ⇒ Sources
-
#update_libraries(uri) ⇒ void
The Sources observer callback that merges a source into the host’s libraries when it gets updated.
Instance Method Details
#explicit_library_for(uri) ⇒ Library?
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.
59 60 61 62 63 64 65 66 67 68 |
# 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 |
#generic_library ⇒ Library
105 106 107 |
# File 'lib/solargraph/language_server/host/dispatch.rb', line 105 def generic_library @generic_library ||= Solargraph::Library.new end |
#generic_library_for(uri) ⇒ Library
Get a generic library for the given URI and attach the corresponding source.
99 100 101 102 |
# File 'lib/solargraph/language_server/host/dispatch.rb', line 99 def generic_library_for uri generic_library.attach sources.find(uri) generic_library end |
#implicit_library_for(uri) ⇒ Library?
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.
81 82 83 84 85 86 87 88 89 90 |
# 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 |
#libraries ⇒ Array<Library>
19 20 21 |
# File 'lib/solargraph/language_server/host/dispatch.rb', line 19 def libraries @libraries ||= [] end |
#library_for(uri) ⇒ Library
Find the best libary match for the given URI.
40 41 42 43 44 45 46 47 |
# 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 |
#sources ⇒ Sources
10 11 12 13 14 15 16 |
# 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 |
#update_libraries(uri) ⇒ void
This method returns an undefined value.
The Sources observer callback that merges a source into the host’s libraries when it gets updated.
28 29 30 31 32 33 34 |
# 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 |