Class: Solargraph::Workspace

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(directory = '', config = nil, server = {}) ⇒ Workspace

Returns a new instance of Workspace.

Parameters:

  • directory (String) (defaults to: '')
  • config (Config, nil) (defaults to: nil)
  • server (Hash) (defaults to: {})


29
30
31
32
33
34
35
36
37
# File 'lib/solargraph/workspace.rb', line 29

def initialize directory = '', config = nil, server = {}
  @directory = directory
  @config = config
  @server = server
  load_sources
  @gemnames = []
  @require_paths = generate_require_paths
  require_plugins
end

Instance Attribute Details

#directoryString (readonly)

Returns:

  • (String)


15
16
17
# File 'lib/solargraph/workspace.rb', line 15

def directory
  @directory
end

#gemnamesArray<String> (readonly) Also known as: source_gems

Returns:

  • (Array<String>)


23
24
25
# File 'lib/solargraph/workspace.rb', line 23

def gemnames
  @gemnames
end

#require_pathsArray<String> (readonly)

The require paths associated with the workspace.

Returns:

  • (Array<String>)


20
21
22
# File 'lib/solargraph/workspace.rb', line 20

def require_paths
  @require_paths
end

Instance Method Details

#command_pathString

Returns:

  • (String)


145
146
147
# File 'lib/solargraph/workspace.rb', line 145

def command_path
  server['commandPath'] || 'solargraph'
end

#configSolargraph::Workspace::Config



40
41
42
# File 'lib/solargraph/workspace.rb', line 40

def config
  @config ||= Solargraph::Workspace::Config.new(directory)
end

#filenamesArray<String>

Returns:

  • (Array<String>)


79
80
81
# File 'lib/solargraph/workspace.rb', line 79

def filenames
  source_hash.keys
end

#gemspec?Boolean

True if the workspace contains at least one gemspec file.

Returns:

  • (Boolean)


117
118
119
# File 'lib/solargraph/workspace.rb', line 117

def gemspec?
  !gemspecs.empty?
end

#gemspecsArray<String>

Get an array of all gemspec files in the workspace.

Returns:

  • (Array<String>)


124
125
126
127
128
129
# File 'lib/solargraph/workspace.rb', line 124

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

Parameters:

  • filename (String)

Returns:

  • (Boolean)


90
91
92
# File 'lib/solargraph/workspace.rb', line 90

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.

Parameters:

Returns:

  • (Boolean)

    True if the source was added to the workspace



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/solargraph/workspace.rb', line 50

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

#rbs_collection_pathString?

Returns:

  • (String, nil)


132
133
134
# File 'lib/solargraph/workspace.rb', line 132

def rbs_collection_path
  @gem_rbs_collection ||= read_rbs_collection_path
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.

Parameters:

  • filename (String)

Returns:

  • (Boolean)

    True if the source was removed from the workspace



72
73
74
75
76
# File 'lib/solargraph/workspace.rb', line 72

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.

Parameters:

  • filename (String)

Returns:



98
99
100
# File 'lib/solargraph/workspace.rb', line 98

def source filename
  source_hash[filename]
end

#sourcesArray<Solargraph::Source>

Returns:



84
85
86
# File 'lib/solargraph/workspace.rb', line 84

def sources
  source_hash.values
end

#synchronize!(updater) ⇒ void

This method returns an undefined value.

Synchronize the workspace from the provided updater.

Parameters:



140
141
142
# File 'lib/solargraph/workspace.rb', line 140

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.

Parameters:

  • path (String)

Returns:

  • (Boolean)


106
107
108
109
110
111
112
# File 'lib/solargraph/workspace.rb', line 106

def would_require? path
  require_paths.each do |rp|
    full = File.join rp, path
    return true if File.exist?(full) or File.exist?(full << ".rb")
  end
  false
end