solargraph 0.18.3 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
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