Class: Solargraph::Workspace
- Inherits:
-
Object
- Object
- Solargraph::Workspace
- Defined in:
- lib/solargraph/workspace.rb,
lib/solargraph/workspace/config.rb
Overview
A workspace consists of the files in a project’s directory and the project’s configuration. It provides a Source for each file to be used in an associated Library or ApiMap.
Defined Under Namespace
Classes: Config
Instance Attribute Summary collapse
- #directory ⇒ String readonly
- #gemnames ⇒ Array<String> (also: #source_gems) readonly
-
#require_paths ⇒ Array<String>
readonly
The require paths associated with the workspace.
Instance Method Summary collapse
- #config ⇒ Solargraph::Workspace::Config
- #filenames ⇒ Array<String>
-
#gemspec? ⇒ Boolean
True if the workspace contains at least one gemspec file.
-
#gemspecs ⇒ Array<String>
Get an array of all gemspec files in the workspace.
- #has_file?(filename) ⇒ Boolean
-
#initialize(directory = '', config = nil) ⇒ Workspace
constructor
A new instance of Workspace.
-
#merge(*sources) ⇒ Boolean
Merge the source.
-
#remove(filename) ⇒ Boolean
Remove a source from the workspace.
-
#source(filename) ⇒ Solargraph::Source
Get a source by its filename.
- #sources ⇒ Array<Solargraph::Source>
-
#synchronize!(updater) ⇒ void
Synchronize the workspace from the provided updater.
-
#would_require?(path) ⇒ Boolean
True if the path resolves to a file in the workspace’s require paths.
Constructor Details
#initialize(directory = '', config = nil) ⇒ Workspace
Returns a new instance of Workspace.
29 30 31 32 33 34 35 36 |
# File 'lib/solargraph/workspace.rb', line 29 def initialize directory = '', config = nil @directory = directory @config = config load_sources @gemnames = [] @require_paths = generate_require_paths require_plugins end |
Instance Attribute Details
#directory ⇒ String (readonly)
16 17 18 |
# File 'lib/solargraph/workspace.rb', line 16 def directory @directory end |
#gemnames ⇒ Array<String> (readonly) Also known as: source_gems
24 25 26 |
# File 'lib/solargraph/workspace.rb', line 24 def gemnames @gemnames end |
#require_paths ⇒ Array<String> (readonly)
The require paths associated with the workspace.
21 22 23 |
# File 'lib/solargraph/workspace.rb', line 21 def require_paths @require_paths end |
Instance Method Details
#config ⇒ Solargraph::Workspace::Config
39 40 41 |
# File 'lib/solargraph/workspace.rb', line 39 def config @config ||= Solargraph::Workspace::Config.new(directory) end |
#filenames ⇒ Array<String>
78 79 80 |
# File 'lib/solargraph/workspace.rb', line 78 def filenames source_hash.keys end |
#gemspec? ⇒ Boolean
True if the workspace contains at least one gemspec file.
115 116 117 |
# File 'lib/solargraph/workspace.rb', line 115 def gemspec? !gemspecs.empty? end |
#gemspecs ⇒ Array<String>
Get an array of all gemspec files in the workspace.
122 123 124 125 126 127 |
# File 'lib/solargraph/workspace.rb', line 122 def gemspecs return [] if directory.empty? || directory == '*' @gemspecs ||= Dir[File.join(directory, '**/*.gemspec')].select do |gs| config.allow? gs end end |
#has_file?(filename) ⇒ Boolean
89 90 91 |
# File 'lib/solargraph/workspace.rb', line 89 def has_file? filename source_hash.key?(filename) end |
#merge(*sources) ⇒ Boolean
Merge the source. A merge will update the existing source for the file or add it to the sources if the workspace is configured to include it. The source is ignored if the configuration excludes it.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/solargraph/workspace.rb', line 49 def merge *sources unless directory == '*' || sources.all? { |source| source_hash.key?(source.filename) } # Reload the config to determine if a new source should be included @config = Solargraph::Workspace::Config.new(directory) end includes_any = false sources.each do |source| if directory == "*" || config.calculated.include?(source.filename) source_hash[source.filename] = source includes_any = true end end includes_any end |
#remove(filename) ⇒ Boolean
Remove a source from the workspace. The source will not be removed if its file exists and the workspace is configured to include it.
71 72 73 74 75 |
# File 'lib/solargraph/workspace.rb', line 71 def remove filename return false unless source_hash.key?(filename) source_hash.delete filename true end |
#source(filename) ⇒ Solargraph::Source
Get a source by its filename.
97 98 99 |
# File 'lib/solargraph/workspace.rb', line 97 def source filename source_hash[filename] end |
#sources ⇒ Array<Solargraph::Source>
83 84 85 |
# File 'lib/solargraph/workspace.rb', line 83 def sources source_hash.values end |
#synchronize!(updater) ⇒ void
This method returns an undefined value.
Synchronize the workspace from the provided updater.
133 134 135 |
# File 'lib/solargraph/workspace.rb', line 133 def synchronize! updater source_hash[updater.filename] = source_hash[updater.filename].synchronize(updater) end |
#would_require?(path) ⇒ Boolean
True if the path resolves to a file in the workspace’s require paths.
105 106 107 108 109 110 |
# File 'lib/solargraph/workspace.rb', line 105 def would_require? path require_paths.each do |rp| return true if File.exist?(File.join(rp, "#{path}.rb")) end false end |