solargraph 0.18.3 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/lib/solargraph/api_map/probe.rb +222 -0
  3. data/lib/solargraph/api_map/source_to_yard.rb +3 -3
  4. data/lib/solargraph/api_map/store.rb +135 -0
  5. data/lib/solargraph/api_map.rb +169 -609
  6. data/lib/solargraph/diagnostics/rubocop.rb +4 -4
  7. data/lib/solargraph/language_server/host.rb +53 -19
  8. data/lib/solargraph/language_server/message/extended/document.rb +1 -1
  9. data/lib/solargraph/language_server/message/extended/search.rb +1 -1
  10. data/lib/solargraph/language_server/message/method_not_found.rb +1 -1
  11. data/lib/solargraph/language_server/message/text_document/definition.rb +2 -15
  12. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +2 -15
  13. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +3 -15
  14. data/lib/solargraph/language_server/message_types.rb +10 -0
  15. data/lib/solargraph/language_server.rb +1 -0
  16. data/lib/solargraph/library.rb +8 -0
  17. data/lib/solargraph/node_methods.rb +6 -1
  18. data/lib/solargraph/page.rb +2 -1
  19. data/lib/solargraph/pin/attribute.rb +8 -12
  20. data/lib/solargraph/pin/base.rb +20 -95
  21. data/lib/solargraph/pin/base_variable.rb +15 -74
  22. data/lib/solargraph/pin/block.rb +21 -0
  23. data/lib/solargraph/pin/block_parameter.rb +30 -44
  24. data/lib/solargraph/pin/class_variable.rb +3 -0
  25. data/lib/solargraph/pin/constant.rb +4 -8
  26. data/lib/solargraph/pin/conversions.rb +4 -3
  27. data/lib/solargraph/pin/documenting.rb +27 -0
  28. data/lib/solargraph/pin/global_variable.rb +3 -0
  29. data/lib/solargraph/pin/instance_variable.rb +5 -4
  30. data/lib/solargraph/pin/local_variable.rb +8 -15
  31. data/lib/solargraph/pin/localized.rb +12 -0
  32. data/lib/solargraph/pin/method.rb +6 -67
  33. data/lib/solargraph/pin/method_parameter.rb +24 -11
  34. data/lib/solargraph/pin/namespace.rb +26 -35
  35. data/lib/solargraph/pin/reference.rb +15 -8
  36. data/lib/solargraph/pin/symbol.rb +34 -3
  37. data/lib/solargraph/pin/yard_object.rb +11 -4
  38. data/lib/solargraph/pin.rb +16 -2
  39. data/lib/solargraph/server.rb +2 -2
  40. data/lib/solargraph/source/change.rb +10 -13
  41. data/lib/solargraph/source/fragment.rb +42 -94
  42. data/lib/solargraph/source/location.rb +13 -0
  43. data/lib/solargraph/source/mapper.rb +426 -0
  44. data/lib/solargraph/source/position.rb +1 -0
  45. data/lib/solargraph/source/range.rb +11 -3
  46. data/lib/solargraph/source.rb +93 -284
  47. data/lib/solargraph/version.rb +1 -1
  48. data/lib/solargraph/views/_method.erb +59 -60
  49. data/lib/solargraph/views/_name_type_tag.erb +10 -0
  50. data/lib/solargraph/views/_namespace.erb +26 -26
  51. data/lib/solargraph/views/document.erb +23 -16
  52. data/lib/solargraph/views/layout.erb +38 -10
  53. data/lib/solargraph/views/search.erb +12 -11
  54. data/lib/solargraph/workspace/config.rb +27 -6
  55. data/lib/solargraph/workspace.rb +10 -2
  56. data/lib/solargraph.rb +10 -2
  57. data/lib/yard-solargraph.rb +3 -0
  58. metadata +25 -20
  59. data/lib/solargraph/pin/directed/attribute.rb +0 -20
  60. data/lib/solargraph/pin/directed/method.rb +0 -22
  61. data/lib/solargraph/pin/directed.rb +0 -9
  62. data/lib/solargraph/pin/parameter.rb +0 -23
@@ -1,56 +1,42 @@
1
1
  module Solargraph
2
2
  module Pin
3
- class BlockParameter < LocalVariable
3
+ class BlockParameter < Base
4
+ include Localized
5
+
4
6
  attr_reader :index
5
7
 
6
- def initialize source, node, namespace, ancestors, index
7
- super(source, node, namespace, ancestors)
8
- @index = index
9
- docstring = source.docstring_for(ancestors.first)
10
- unless docstring.nil?
11
- tags = docstring.tags(:param)
12
- tags.each do |tag|
13
- if tag.name == name and !tag.types.nil? and !tag.types.empty?
14
- @return_type = tag.types[0]
15
- end
16
- end
17
- end
8
+ attr_reader :block
9
+
10
+ def initialize location, namespace, name, docstring, block
11
+ super(location, namespace, name, docstring)
12
+ @block = block
13
+ @presence = block.location.range
18
14
  end
19
15
 
20
- # @param api_map [Solargraph::ApiMap]
21
- def resolve api_map
22
- return unless return_type.nil?
23
- signature = resolve_node_signature(@tree[0].children[0])
24
- # @todo Hardcoding :class scope might not be appropriate
25
- # meth = api_map.infer_pin(signature, namespace, :class, [:public, :private, :protected], true)
26
- meth = api_map.tail_pin(signature, namespace, :class, [:public, :private, :protected])
27
- return nil if meth.nil?
28
- if (Solargraph::CoreFills::METHODS_WITH_YIELDPARAM_SUBTYPES.include?(meth.path))
29
- base = signature.split('.')[0..-2].join('.')
30
- return nil if base.nil? or base.empty?
31
- # @todo Maybe use a fragment so this picks up local variables
32
- bmeth = api_map.tail_pin(base, namespace, :class, [:public, :private, :protected])
33
- return nil if bmeth.nil?
34
- subtypes = get_subtypes(bmeth.return_type)
35
- @return_type = api_map.find_fully_qualified_namespace(subtypes[0], namespace)
36
- else
37
- unless meth.docstring.nil?
38
- yps = meth.docstring.tags(:yieldparam)
39
- unless yps[index].nil? or yps[index].types.nil? or yps[index].types.empty?
40
- @return_type = yps[index].types[0]
41
- end
42
- end
43
- end
16
+ def kind
17
+ Pin::BLOCK_PARAMETER
44
18
  end
45
19
 
46
- private
20
+ def completion_item_kind
21
+ Solargraph::LanguageServer::CompletionItemKinds::VARIABLE
22
+ end
23
+
24
+ def index
25
+ block.parameters.index(self)
26
+ end
47
27
 
48
- def get_subtypes type
49
- return nil if type.nil?
50
- match = type.match(/<([a-z0-9_:, ]*)>/i)
51
- return [] if match.nil?
52
- match[1].split(',').map(&:strip)
53
- end
28
+ def return_type
29
+ if @return_type.nil? and !block.docstring.nil?
30
+ found = nil
31
+ params = block.docstring.tags(:param)
32
+ params.each do |p|
33
+ next unless p.name == name
34
+ found = p
35
+ end
36
+ @return_type = found.types[0] unless found.nil? or found.types.nil?
37
+ end
38
+ @return_type
39
+ end
54
40
  end
55
41
  end
56
42
  end
@@ -1,6 +1,9 @@
1
1
  module Solargraph
2
2
  module Pin
3
3
  class ClassVariable < BaseVariable
4
+ def kind
5
+ Pin::CLASS_VARIABLE
6
+ end
4
7
  end
5
8
  end
6
9
  end
@@ -3,23 +3,19 @@ module Solargraph
3
3
  class Constant < BaseVariable
4
4
  attr_reader :visibility
5
5
 
6
- def initialize source, node, namespace, visibility
7
- super(source, node, namespace)
6
+ def initialize location, namespace, name, docstring, signature, literal, context, visibility
7
+ super(location, namespace, name, docstring, signature, literal, context)
8
8
  @visibility = visibility
9
9
  end
10
10
 
11
- def name
12
- @name ||= node.children[1].to_s
11
+ def kind
12
+ Pin::CONSTANT
13
13
  end
14
14
 
15
15
  def completion_item_kind
16
16
  Solargraph::LanguageServer::CompletionItemKinds::CONSTANT
17
17
  end
18
18
 
19
- def value
20
- source.code_for(node.children[2])
21
- end
22
-
23
19
  def path
24
20
  "#{namespace}::#{name}"
25
21
  end
@@ -1,11 +1,12 @@
1
1
  module Solargraph
2
2
  module Pin
3
+ # @todo Move this stuff. It should be the responsibility of the language server.
3
4
  module Conversions
4
5
  # @return [Hash]
5
6
  def completion_item
6
7
  {
7
8
  label: name,
8
- kind: kind,
9
+ kind: completion_item_kind,
9
10
  detail: completion_item_detail,
10
11
  data: {
11
12
  path: path,
@@ -42,7 +43,7 @@ module Solargraph
42
43
  # @return [Hash]
43
44
  def signature_help
44
45
  {
45
- label: name + '(' + arguments.join(', ') + ')',
46
+ label: name + '(' + parameters.join(', ') + ')',
46
47
  documentation: documentation
47
48
  }
48
49
  end
@@ -51,7 +52,7 @@ module Solargraph
51
52
 
52
53
  def completion_item_detail
53
54
  detail = ''
54
- detail += "(#{parameters.join(', ')}) " unless parameters.empty?
55
+ detail += "(#{parameters.join(', ')}) " unless kind != Pin::METHOD or parameters.empty?
55
56
  detail += "=> #{return_type}" unless return_type.nil?
56
57
  return nil if detail.empty?
57
58
  detail
@@ -0,0 +1,27 @@
1
+ module Solargraph
2
+ module Pin
3
+ module Documenting
4
+ # @return [String]
5
+ def documentation
6
+ if @documentation.nil? and !docstring.nil?
7
+ @documentation = ReverseMarkdown.convert(helper.html_markup_rdoc(docstring), github_flavored: true)
8
+ @documentation.strip!
9
+ end
10
+ @documentation
11
+ end
12
+
13
+ # True if the suggestion has documentation.
14
+ # Useful for determining whether a client should resolve a suggestion's
15
+ # path to retrieve more information about it.
16
+ #
17
+ # @return [Boolean]
18
+ def has_doc?
19
+ !docstring.nil? and !docstring.all.empty?
20
+ end
21
+
22
+ def helper
23
+ @helper ||= Solargraph::Pin::Helper.new
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,6 +1,9 @@
1
1
  module Solargraph
2
2
  module Pin
3
3
  class GlobalVariable < BaseVariable
4
+ def kind
5
+ Pin::GLOBAL_VARIABLE
6
+ end
4
7
  end
5
8
  end
6
9
  end
@@ -1,11 +1,12 @@
1
1
  module Solargraph
2
2
  module Pin
3
3
  class InstanceVariable < BaseVariable
4
- attr_reader :scope
4
+ def kind
5
+ Pin::INSTANCE_VARIABLE
6
+ end
5
7
 
6
- def initialize source, node, namespace, scope
7
- super(source, node, namespace)
8
- @scope = scope
8
+ def scope
9
+ @scope ||= (context.kind == Pin::NAMESPACE ? :class : context.scope)
9
10
  end
10
11
  end
11
12
  end
@@ -1,23 +1,16 @@
1
1
  module Solargraph
2
2
  module Pin
3
3
  class LocalVariable < BaseVariable
4
- def initialize source, node, namespace, ancestors
5
- super(source, node, namespace)
6
- @tree = []
7
- ancestors.each do |parent|
8
- if [:block, :def, :defs, :class, :module, :source].include? parent.type
9
- @tree.push parent
10
- end
11
- end
4
+ include Localized
5
+
6
+ def initialize location, namespace, name, docstring, assignment, literal, context, block, presence
7
+ super(location, namespace, name, docstring, assignment, literal, context)
8
+ @block = block
9
+ @presence = presence
12
10
  end
13
11
 
14
- def visible_from? n
15
- parents = [n] + (source.tree_for(n) || [])
16
- parents.each do |p|
17
- return true if @tree[0] == p
18
- return false if [:def, :defs, :class, :module].include?(p.type)
19
- end
20
- false
12
+ def kind
13
+ Pin::LOCAL_VARIABLE
21
14
  end
22
15
  end
23
16
  end
@@ -0,0 +1,12 @@
1
+ module Solargraph
2
+ module Pin
3
+ module Localized
4
+ attr_reader :block
5
+ attr_reader :presence
6
+
7
+ def visible_from?(block, position)
8
+ self.block == block and presence.contain?(position)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -3,20 +3,17 @@ module Solargraph
3
3
  class Method < Base
4
4
  attr_reader :scope
5
5
  attr_reader :visibility
6
+ attr_reader :parameters
6
7
 
7
- def initialize source, node, namespace, scope, visibility
8
- super(source, node, namespace)
8
+ def initialize location, namespace, name, docstring, scope, visibility, args
9
+ super(location, namespace, name, docstring)
9
10
  @scope = scope
10
11
  @visibility = visibility
11
- # Exception for initialize methods
12
- if name == 'initialize' and scope == :instance
13
- @visibility = :private
14
- end
15
- @fully_resolved = false
12
+ @parameters = args
16
13
  end
17
14
 
18
- def name
19
- @name ||= "#{node.children[(node.type == :def ? 0 : 1)]}"
15
+ def kind
16
+ Solargraph::Pin::METHOD
20
17
  end
21
18
 
22
19
  def path
@@ -39,10 +36,6 @@ module Solargraph
39
36
  @return_type
40
37
  end
41
38
 
42
- def parameters
43
- @parameters ||= get_method_args
44
- end
45
-
46
39
  def documentation
47
40
  if @documentation.nil?
48
41
  @documentation ||= super || ''
@@ -83,60 +76,6 @@ module Solargraph
83
76
  end
84
77
  @params
85
78
  end
86
-
87
- def resolve api_map
88
- if return_type.nil?
89
- sc = api_map.superclass_of(namespace)
90
- until sc.nil?
91
- sc_path = "#{sc}#{scope == :instance ? '#' : '.'}#{name}"
92
- sugg = api_map.get_path_suggestions(sc_path).first
93
- break if sugg.nil?
94
- @return_type = api_map.find_fully_qualified_namespace(sugg.return_type, sugg.namespace) unless sugg.return_type.nil?
95
- break unless @return_type.nil?
96
- sc = api_map.superclass_of(sc)
97
- end
98
- end
99
- unless return_type.nil? or @fully_resolved
100
- @fully_resolved = true
101
- @return_type = api_map.find_fully_qualified_namespace(@return_type, namespace)
102
- end
103
- end
104
-
105
- def method?
106
- true
107
- end
108
-
109
- private
110
-
111
- # @return [Array<String>]
112
- def get_method_args
113
- return [] if node.nil?
114
- list = nil
115
- args = []
116
- node.children.each { |c|
117
- if c.kind_of?(AST::Node) and c.type == :args
118
- list = c
119
- break
120
- end
121
- }
122
- return args if list.nil?
123
- list.children.each { |c|
124
- if c.type == :arg
125
- args.push c.children[0].to_s
126
- elsif c.type == :restarg
127
- args.push "*#{c.children[0]}"
128
- elsif c.type == :optarg
129
- args.push "#{c.children[0]} = #{source.code_for(c.children[1])}"
130
- elsif c.type == :kwarg
131
- args.push "#{c.children[0]}:"
132
- elsif c.type == :kwoptarg
133
- args.push "#{c.children[0]}: #{source.code_for(c.children[1])}"
134
- elsif c.type == :blockarg
135
- args.push "&#{c.children[0]}"
136
- end
137
- }
138
- args
139
- end
140
79
  end
141
80
  end
142
81
  end
@@ -1,18 +1,31 @@
1
1
  module Solargraph
2
2
  module Pin
3
- class MethodParameter < LocalVariable
4
- def initialize source, node, namespace, ancestors
5
- super
6
- # Look for the return type in the method's @param tags
7
- docstring = source.docstring_for(ancestors.first)
8
- unless docstring.nil?
9
- tags = docstring.tags(:param)
10
- tags.each do |tag|
11
- if tag.name == name and !tag.types.nil? and !tag.types.empty?
12
- @return_type = tag.types[0]
13
- end
3
+ class MethodParameter < Base
4
+ include Localized
5
+
6
+ attr_reader :block
7
+
8
+ def initialize location, namespace, name, docstring, block
9
+ super(location, namespace, name, docstring)
10
+ @block = block
11
+ @presence = block.location.range
12
+ end
13
+
14
+ def completion_item_kind
15
+ Solargraph::LanguageServer::CompletionItemKinds::VARIABLE
16
+ end
17
+
18
+ def return_type
19
+ if @return_type.nil? and !block.docstring.nil?
20
+ found = nil
21
+ params = block.docstring.tags(:param)
22
+ params.each do |p|
23
+ next unless p.name == name
24
+ found = p
14
25
  end
26
+ @return_type = found.types[0] unless found.nil? or found.types.nil?
15
27
  end
28
+ @return_type
16
29
  end
17
30
  end
18
31
  end
@@ -5,60 +5,51 @@ module Solargraph
5
5
 
6
6
  attr_reader :visibility
7
7
 
8
- def initialize source, node, namespace, visibility, superclass = nil
9
- super(source, node, namespace)
10
- @visibility = visibility
11
- @superclass_reference = Reference.new(self, superclass) unless superclass.nil?
12
- end
13
-
14
- def reference_include name
15
- include_references.push Reference.new(self, name)
16
- end
17
-
18
- def reference_extend name
19
- extend_references.push Reference.new(self, name)
20
- end
8
+ attr_reader :type
21
9
 
22
- def reference_superclass name
23
- @superclass_reference = Reference.new(self, name)
24
- end
25
-
26
- def name
27
- @name ||= (node.type == :source ? '' : pack_name(node.children[0]).last.to_s)
28
- end
29
-
30
- def path
31
- @path ||= (namespace.empty? ? '' : "#{namespace}::") + name
32
- end
10
+ # @return [Pin::Reference]
11
+ attr_reader :superclass_reference
33
12
 
34
- def completion_item_kind
35
- @kind ||= (node.type == :class ? Solargraph::LanguageServer::CompletionItemKinds::CLASS : Solargraph::LanguageServer::CompletionItemKinds::MODULE)
13
+ def initialize location, namespace, name, docstring, type, visibility, superclass
14
+ super(location, namespace, name, docstring)
15
+ @type = type
16
+ @visibility = visibility
17
+ # @superclass_reference = Reference.new(self, superclass) unless superclass.nil?
18
+ @superclass_reference = Pin::Reference.new(location, namespace, superclass) unless superclass.nil?
36
19
  end
37
20
 
21
+ # @return [Array<Pin::Reference>]
38
22
  def include_references
39
23
  @include_references ||= []
40
24
  end
41
25
 
26
+ # @return [Array<String>]
42
27
  def extend_references
43
28
  @extend_references ||= []
44
29
  end
45
30
 
46
- def superclass_reference
47
- @superclass_reference
31
+ def kind
32
+ Pin::NAMESPACE
33
+ end
34
+
35
+ def named_context
36
+ path
48
37
  end
49
38
 
50
- # @return [Symbol] :class or :module
51
- def type
52
- node.type
39
+ def scope
40
+ :class
53
41
  end
54
42
 
55
- def location
56
- return "#{source.filename}:0" if name.empty?
57
- super
43
+ def completion_item_kind
44
+ (type == :class ? LanguageServer::CompletionItemKinds::CLASS : LanguageServer::CompletionItemKinds::MODULE)
45
+ end
46
+
47
+ def path
48
+ @path ||= (namespace.empty? ? '' : "#{namespace}::") + name
58
49
  end
59
50
 
60
51
  def return_type
61
- @return_type ||= (node.type == :class ? 'Class' : 'Module') + "<#{path}>"
52
+ @return_type ||= (type == :class ? 'Class' : 'Module') + "<#{path}>"
62
53
  end
63
54
  end
64
55
  end
@@ -1,20 +1,27 @@
1
1
  module Solargraph
2
2
  module Pin
3
3
  class Reference
4
- attr_reader :pin
4
+ # @return [Source::Location]
5
+ attr_reader :location
6
+
7
+ # @return [String]
8
+ attr_reader :namespace
9
+
10
+ # @return [String]
5
11
  attr_reader :name
6
12
 
7
- def initialize pin, name
8
- @pin = pin
13
+ def initialize location, namespace, name
14
+ @location = location
15
+ @namespace = namespace
9
16
  @name = name
10
- @resolved = false
11
17
  end
12
18
 
19
+ # @todo Deprecaate
13
20
  def resolve api_map
14
- unless @resolved
15
- @resolved = true
16
- @name = api_map.find_fully_qualified_namespace(@name, pin.namespace)
17
- end
21
+ end
22
+
23
+ def filename
24
+ location.filename
18
25
  end
19
26
  end
20
27
  end
@@ -1,8 +1,39 @@
1
1
  module Solargraph
2
2
  module Pin
3
- class Symbol < Base
4
- def name
5
- @name ||= ":#{node.children[0]}"
3
+ class Symbol
4
+ include Conversions
5
+
6
+ attr_reader :location
7
+
8
+ attr_reader :name
9
+
10
+ def initialize location, name
11
+ @name = name
12
+ @location = location
13
+ end
14
+
15
+ def filename
16
+ location.filename
17
+ end
18
+
19
+ def kind
20
+ Pin::SYMBOL
21
+ end
22
+
23
+ def path
24
+ nil
25
+ end
26
+
27
+ def identifier
28
+ name
29
+ end
30
+
31
+ def completion_item_kind
32
+ Solargraph::LanguageServer::CompletionItemKinds::KEYWORD
33
+ end
34
+
35
+ def return_type
36
+ 'Symbol'
6
37
  end
7
38
  end
8
39
  end
@@ -8,6 +8,13 @@ module Solargraph
8
8
  YARD::CodeObjects::ConstantObject => Solargraph::LanguageServer::CompletionItemKinds::CONSTANT
9
9
  }
10
10
 
11
+ KIND_MAP = {
12
+ YARD::CodeObjects::ClassObject => Pin::NAMESPACE,
13
+ YARD::CodeObjects::ModuleObject => Pin::NAMESPACE,
14
+ YARD::CodeObjects::MethodObject => Pin::METHOD,
15
+ YARD::CodeObjects::ConstantObject => Pin::CONSTANT
16
+ }
17
+
11
18
  # @return [YARD::CodeObjects::Base]
12
19
  attr_reader :code_object
13
20
 
@@ -22,6 +29,10 @@ module Solargraph
22
29
  @name ||= code_object.name.to_s
23
30
  end
24
31
 
32
+ def kind
33
+ @kind ||= KIND_MAP[code_object.class] || Pin::KEYWORD
34
+ end
35
+
25
36
  def completion_item_kind
26
37
  @completion_item_kind ||= COMPLETION_ITEM_KIND_MAP[code_object.class] || Solargraph::LanguageServer::CompletionItemKinds::KEYWORD
27
38
  end
@@ -77,10 +88,6 @@ module Solargraph
77
88
  @parameters ||= get_method_args
78
89
  end
79
90
 
80
- def method?
81
- completion_item_kind == Solargraph::LanguageServer::CompletionItemKinds::METHOD
82
- end
83
-
84
91
  def visibility
85
92
  :public #@todo Resolve this
86
93
  end
@@ -12,13 +12,27 @@ module Solargraph
12
12
  autoload :GlobalVariable, 'solargraph/pin/global_variable'
13
13
  autoload :Constant, 'solargraph/pin/constant'
14
14
  autoload :Symbol, 'solargraph/pin/symbol'
15
- autoload :Directed, 'solargraph/pin/directed'
16
15
  autoload :Namespace, 'solargraph/pin/namespace'
17
16
  autoload :YardObject, 'solargraph/pin/yard_object'
18
17
  autoload :Keyword, 'solargraph/pin/keyword'
19
- autoload :Parameter, 'solargraph/pin/parameter'
20
18
  autoload :MethodParameter, 'solargraph/pin/method_parameter'
21
19
  autoload :BlockParameter, 'solargraph/pin/block_parameter'
22
20
  autoload :Reference, 'solargraph/pin/reference'
21
+ autoload :Documenting, 'solargraph/pin/documenting'
22
+ autoload :Block, 'solargraph/pin/block'
23
+ autoload :Localized, 'solargraph/pin/localized'
24
+
25
+ ATTRIBUTE = 1
26
+ CLASS_VARIABLE = 2
27
+ CONSTANT = 3
28
+ GLOBAL_VARIABLE = 4
29
+ INSTANCE_VARIABLE = 5
30
+ KEYWORD = 6
31
+ LOCAL_VARIABLE = 7
32
+ METHOD = 8
33
+ NAMESPACE = 9
34
+ SYMBOL = 10
35
+ BLOCK = 11
36
+ BLOCK_PARAMETER = 12
23
37
  end
24
38
  end
@@ -161,12 +161,12 @@ module Solargraph
161
161
 
162
162
  get '/search' do
163
163
  @results = @@library.search(params['query'])
164
- erb :search
164
+ erb :search, locals: { query: params['query'], results: @results }
165
165
  end
166
166
 
167
167
  get '/document' do
168
168
  @objects = @@library.document(params['query'])
169
- erb :document
169
+ erb :document, locals: { objects: @objects }
170
170
  end
171
171
 
172
172
  def htmlify text