solargraph 0.27.1 → 0.28.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.
- checksums.yaml +4 -4
- data/lib/solargraph.rb +8 -17
- data/lib/solargraph/api_map.rb +4 -3
- data/lib/solargraph/api_map/cache.rb +5 -5
- data/lib/solargraph/api_map/source_to_yard.rb +3 -2
- data/lib/solargraph/api_map/store.rb +25 -13
- data/lib/solargraph/complex_type.rb +3 -0
- data/lib/solargraph/diagnostics/update_errors.rb +21 -1
- data/lib/solargraph/language_server/host.rb +4 -3
- data/lib/solargraph/language_server/message/text_document/rename.rb +1 -1
- data/lib/solargraph/library.rb +12 -4
- data/lib/solargraph/pin.rb +5 -1
- data/lib/solargraph/pin/base.rb +0 -10
- data/lib/solargraph/pin/conversions.rb +1 -1
- data/lib/solargraph/pin/documenting.rb +0 -9
- data/lib/solargraph/pin/duck_method.rb +1 -1
- data/lib/solargraph/pin/keyword.rb +0 -5
- data/lib/solargraph/pin/namespace.rb +3 -16
- data/lib/solargraph/pin/reference.rb +13 -26
- data/lib/solargraph/pin/reference/extend.rb +11 -0
- data/lib/solargraph/pin/reference/include.rb +11 -0
- data/lib/solargraph/pin/reference/require.rb +15 -0
- data/lib/solargraph/pin/reference/superclass.rb +11 -0
- data/lib/solargraph/pin/symbol.rb +0 -4
- data/lib/solargraph/pin/yard_pin/namespace.rb +14 -14
- data/lib/solargraph/pin/yard_pin/yard_mixin.rb +0 -4
- data/lib/solargraph/position.rb +7 -0
- data/lib/solargraph/source.rb +7 -28
- data/lib/solargraph/source/chain.rb +0 -1
- data/lib/solargraph/source/chain/call.rb +1 -1
- data/lib/solargraph/source/chain/constant.rb +13 -4
- data/lib/solargraph/source/change.rb +7 -1
- data/lib/solargraph/source/cursor.rb +1 -5
- data/lib/solargraph/source/node_chainer.rb +5 -6
- data/lib/solargraph/source/source_chainer.rb +14 -12
- data/lib/solargraph/source_map.rb +5 -6
- data/lib/solargraph/source_map/clip.rb +16 -29
- data/lib/solargraph/source_map/mapper.rb +26 -21
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace.rb +1 -2
- data/lib/solargraph/workspace/config.rb +10 -5
- data/lib/solargraph/yard_map.rb +3 -1
- metadata +6 -3
- data/lib/solargraph/source/chain/definition.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68af7d3f5b6fca0126629ca8ed363004b4c12d2d8ef50a0fc01a571c6459d4cc
|
4
|
+
data.tar.gz: 366bbc31b39be7794af1de27a6d63ee88771b22134622dbc6c4ffb146a227712
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ffc365f1e42f0a9d17aa40f4721d5f753e94e6b24c0b8c72f43abfc583e740b6e289d7d1ec88b7388c837406e60d2cd1f0376c8c12f477eb3a7ea4de28d579d
|
7
|
+
data.tar.gz: d999e3ef14ca1ee00beec4c5eac3906f4c86faccfa9742e1451e85aada0a969d818393b22dbe2be887a9d0346f0ca26810243a49cb6b3b694cead4e81b91cc5c
|
data/lib/solargraph.rb
CHANGED
@@ -3,26 +3,16 @@ require 'solargraph/version'
|
|
3
3
|
require 'rubygems/package'
|
4
4
|
require 'yard-solargraph'
|
5
5
|
|
6
|
+
# The top-level namespace for the Solargraph code mapping, documentation,
|
7
|
+
# static analysis, and language server libraries.
|
8
|
+
#
|
6
9
|
module Solargraph
|
7
10
|
class InvalidOffsetError < RangeError; end
|
8
11
|
class DiagnosticsError < RuntimeError; end
|
9
12
|
class FileNotFoundError < RuntimeError; end
|
10
13
|
class SourceNotAvailableError < StandardError; end
|
11
14
|
class ComplexTypeError < StandardError; end
|
12
|
-
class WorkspaceTooLargeError < RuntimeError
|
13
|
-
# @return [Integer]
|
14
|
-
attr_reader :size
|
15
|
-
|
16
|
-
# @return [Integer]
|
17
|
-
attr_reader :max
|
18
|
-
|
19
|
-
# @param size [Integer] The number of files included in the workspace
|
20
|
-
# @param max [Integer] The maximum number of files allowed
|
21
|
-
def initialize size, max
|
22
|
-
@size = size
|
23
|
-
@max = max
|
24
|
-
end
|
25
|
-
end
|
15
|
+
class WorkspaceTooLargeError < RuntimeError; end
|
26
16
|
|
27
17
|
autoload :Position, 'solargraph/position'
|
28
18
|
autoload :Range, 'solargraph/range'
|
@@ -45,9 +35,10 @@ module Solargraph
|
|
45
35
|
autoload :ComplexType, 'solargraph/complex_type'
|
46
36
|
autoload :Bundle, 'solargraph/bundle'
|
47
37
|
|
48
|
-
|
49
|
-
|
50
|
-
|
38
|
+
dir = File.dirname(__FILE__)
|
39
|
+
YARDOC_PATH = File.realpath(File.join(dir, '..', 'yardoc'))
|
40
|
+
YARD_EXTENSION_FILE = File.join(dir, 'yard-solargraph.rb')
|
41
|
+
VIEWS_PATH = File.join(dir, 'solargraph', 'views')
|
51
42
|
end
|
52
43
|
|
53
44
|
Solargraph::YardMap::CoreDocs.require_minimum
|
data/lib/solargraph/api_map.rb
CHANGED
@@ -21,7 +21,6 @@ module Solargraph
|
|
21
21
|
attr_reader :unresolved_requires
|
22
22
|
|
23
23
|
# @param pins [Array<Solargraph::Pin::Base>]
|
24
|
-
# @param yard_map [YardMap]
|
25
24
|
# def initialize workspace = Solargraph::Workspace.new(nil)
|
26
25
|
def initialize pins: []
|
27
26
|
# @todo Extensions don't work yet
|
@@ -297,6 +296,7 @@ module Solargraph
|
|
297
296
|
#
|
298
297
|
# @param type [Solargraph::ComplexType]
|
299
298
|
# @param context [String]
|
299
|
+
# @param internal [Boolean] True to include private methods
|
300
300
|
# @return [Array<Solargraph::Pin::Base>]
|
301
301
|
def get_complex_type_methods type, context = '', internal = false
|
302
302
|
return [] if type.undefined? || type.void?
|
@@ -305,6 +305,7 @@ module Solargraph
|
|
305
305
|
type.select(&:duck_type?).each do |t|
|
306
306
|
result.push Pin::DuckMethod.new(nil, t.tag[1..-1])
|
307
307
|
end
|
308
|
+
result.concat get_methods('Object')
|
308
309
|
else
|
309
310
|
unless type.nil? || type.name == 'void'
|
310
311
|
namespace = qualify(type.namespace, context)
|
@@ -480,7 +481,7 @@ module Solargraph
|
|
480
481
|
return [] if skip.include?(reqstr)
|
481
482
|
skip.push reqstr
|
482
483
|
result = []
|
483
|
-
result.concat store.get_methods(fqns, scope: scope, visibility: visibility)
|
484
|
+
result.concat store.get_methods(fqns, scope: scope, visibility: visibility).sort{ |a, b| a.name <=> b.name }
|
484
485
|
if deep
|
485
486
|
sc = store.get_superclass(fqns)
|
486
487
|
unless sc.nil?
|
@@ -520,7 +521,7 @@ module Solargraph
|
|
520
521
|
return [] if skip.include?(fqns)
|
521
522
|
skip.push fqns
|
522
523
|
result = []
|
523
|
-
result.concat store.get_constants(fqns, visibility)
|
524
|
+
result.concat store.get_constants(fqns, visibility).sort{ |a, b| a.name <=> b.name }
|
524
525
|
store.get_includes(fqns).each do |is|
|
525
526
|
fqis = qualify(is, fqns)
|
526
527
|
result.concat inner_get_constants(fqis, [:public], skip) unless fqis.nil?
|
@@ -74,11 +74,11 @@ module Solargraph
|
|
74
74
|
|
75
75
|
# @return [Boolean]
|
76
76
|
def empty?
|
77
|
-
@signature_types.empty?
|
78
|
-
@assignment_node_types.empty?
|
79
|
-
@methods.empty?
|
80
|
-
@method_stacks.empty?
|
81
|
-
@constants.empty?
|
77
|
+
@signature_types.empty? &&
|
78
|
+
@assignment_node_types.empty? &&
|
79
|
+
@methods.empty? &&
|
80
|
+
@method_stacks.empty? &&
|
81
|
+
@constants.empty? &&
|
82
82
|
@qualified_namespaces.empty?
|
83
83
|
end
|
84
84
|
end
|
@@ -28,8 +28,9 @@ module Solargraph
|
|
28
28
|
code_object_map[pin.path].files.push pin.location.filename unless pin.location.nil?
|
29
29
|
end
|
30
30
|
store.namespace_pins.each do |pin|
|
31
|
-
pin.include_references.each do |ref|
|
32
|
-
|
31
|
+
# pin.include_references.each do |ref|
|
32
|
+
store.get_includes(pin.path).each do |ref|
|
33
|
+
code_object_map[pin.path].instance_mixins.push code_object_map[ref] unless code_object_map[ref].nil? or code_object_map[pin.path].nil?
|
33
34
|
end
|
34
35
|
end
|
35
36
|
store.method_pins.each do |pin|
|
@@ -34,30 +34,20 @@ module Solargraph
|
|
34
34
|
# @param fqns [String]
|
35
35
|
# @return [String]
|
36
36
|
def get_superclass fqns
|
37
|
-
|
38
|
-
return pin.superclass_reference.name unless pin.superclass_reference.nil?
|
39
|
-
end
|
37
|
+
return superclass_references[fqns].first if superclass_references.has_key?(fqns)
|
40
38
|
nil
|
41
39
|
end
|
42
40
|
|
43
41
|
# @param fqns [String]
|
44
42
|
# @return [Array<String>]
|
45
43
|
def get_includes fqns
|
46
|
-
|
47
|
-
fqns_pins(fqns).each do |pin|
|
48
|
-
result.concat pin.include_references.map(&:name)
|
49
|
-
end
|
50
|
-
result
|
44
|
+
include_references[fqns] || []
|
51
45
|
end
|
52
46
|
|
53
47
|
# @param fqns [String]
|
54
48
|
# @return [Array<String>]
|
55
49
|
def get_extends fqns
|
56
|
-
|
57
|
-
fqns_pins(fqns).each do |pin|
|
58
|
-
result.concat pin.extend_references.map(&:name)
|
59
|
-
end
|
60
|
-
result
|
50
|
+
extend_references[fqns] || []
|
61
51
|
end
|
62
52
|
|
63
53
|
# @param path [String]
|
@@ -141,6 +131,18 @@ module Solargraph
|
|
141
131
|
@symbols ||= []
|
142
132
|
end
|
143
133
|
|
134
|
+
def superclass_references
|
135
|
+
@superclass_references ||= {}
|
136
|
+
end
|
137
|
+
|
138
|
+
def include_references
|
139
|
+
@include_references ||= {}
|
140
|
+
end
|
141
|
+
|
142
|
+
def extend_references
|
143
|
+
@extend_references ||= {}
|
144
|
+
end
|
145
|
+
|
144
146
|
# @param name [String]
|
145
147
|
# @return [Array<Solargraph::Pin::Namespace>]
|
146
148
|
def namespace_children name
|
@@ -163,6 +165,16 @@ module Solargraph
|
|
163
165
|
namespace_map[pin.namespace].push pin
|
164
166
|
namespaces.add pin.path if pin.kind == Pin::NAMESPACE and !pin.path.empty?
|
165
167
|
symbols.push pin if pin.kind == Pin::SYMBOL
|
168
|
+
if pin.kind == Pin::INCLUDE_REFERENCE
|
169
|
+
include_references[pin.namespace] ||= []
|
170
|
+
include_references[pin.namespace].push pin.name
|
171
|
+
elsif pin.kind == Pin::EXTEND_REFERENCE
|
172
|
+
extend_references[pin.namespace] ||= []
|
173
|
+
extend_references[pin.namespace].push pin.name
|
174
|
+
elsif pin.kind == Pin::SUPERCLASS_REFERENCE
|
175
|
+
superclass_references[pin.namespace] ||= []
|
176
|
+
superclass_references[pin.namespace].push pin.name
|
177
|
+
end
|
166
178
|
end
|
167
179
|
@namespace_pins = nil
|
168
180
|
@method_pins = nil
|
@@ -9,11 +9,14 @@ module Solargraph
|
|
9
9
|
autoload :TypeMethods, 'solargraph/complex_type/type_methods'
|
10
10
|
autoload :UniqueType, 'solargraph/complex_type/unique_type'
|
11
11
|
|
12
|
+
# @param types [Array<ComplexType>]
|
12
13
|
def initialize types = [ComplexType::UNDEFINED]
|
13
14
|
super()
|
14
15
|
concat types
|
15
16
|
end
|
16
17
|
|
18
|
+
# @param api_map [ApiMap]
|
19
|
+
# @param context [String]
|
17
20
|
def qualify api_map, context = ''
|
18
21
|
types = map do |t|
|
19
22
|
t.qualify api_map, context
|
@@ -3,7 +3,7 @@ module Solargraph
|
|
3
3
|
class UpdateErrors < Base
|
4
4
|
def diagnose source, api_map
|
5
5
|
result = []
|
6
|
-
source.error_ranges.each do |range|
|
6
|
+
combine_ranges(source.code, source.error_ranges).each do |range|
|
7
7
|
result.push(
|
8
8
|
range: range.to_hash,
|
9
9
|
severity: Diagnostics::Severities::ERROR,
|
@@ -13,6 +13,26 @@ module Solargraph
|
|
13
13
|
end
|
14
14
|
result
|
15
15
|
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
# Combine an array of ranges by their starting lines.
|
20
|
+
#
|
21
|
+
# @param ranges [Array<Range>]
|
22
|
+
# @return [Array<Range>]
|
23
|
+
def combine_ranges code, ranges
|
24
|
+
result = []
|
25
|
+
lines = []
|
26
|
+
ranges.sort{|a, b| a.start.line <=> b.start.line}.each do |rng|
|
27
|
+
next if rng.nil? || lines.include?(rng.start.line)
|
28
|
+
lines.push rng.start.line
|
29
|
+
next if rng.start.line >= code.lines.length
|
30
|
+
scol = code.lines[rng.start.line].index(/[^\s]/) || 0
|
31
|
+
ecol = code.lines[rng.start.line].length
|
32
|
+
result.push Range.from_to(rng.start.line, scol, rng.start.line, ecol)
|
33
|
+
end
|
34
|
+
result
|
35
|
+
end
|
16
36
|
end
|
17
37
|
end
|
18
38
|
end
|
@@ -186,7 +186,7 @@ module Solargraph
|
|
186
186
|
rescue WorkspaceTooLargeError => e
|
187
187
|
send_notification 'window/showMessage', {
|
188
188
|
'type' => Solargraph::LanguageServer::MessageTypes::WARNING,
|
189
|
-
'message' =>
|
189
|
+
'message' => e.message
|
190
190
|
}
|
191
191
|
@library = Solargraph::Library.load(nil)
|
192
192
|
end
|
@@ -372,9 +372,10 @@ module Solargraph
|
|
372
372
|
# @param filename [String]
|
373
373
|
# @param line [Integer]
|
374
374
|
# @param column [Integer]
|
375
|
+
# @param strip [Boolean] Strip special characters from variable names
|
375
376
|
# @return [Array<Solargraph::Range>]
|
376
|
-
def references_from filename, line, column
|
377
|
-
result = library.references_from(filename, line, column)
|
377
|
+
def references_from filename, line, column, strip: true
|
378
|
+
result = library.references_from(filename, line, column, strip: strip)
|
378
379
|
end
|
379
380
|
|
380
381
|
# @param query [String]
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Solargraph::LanguageServer::Message::TextDocument
|
2
2
|
class Rename < Base
|
3
3
|
def process
|
4
|
-
locs = host.references_from(uri_to_file(params['textDocument']['uri']), params['position']['line'], params['position']['character'])
|
4
|
+
locs = host.references_from(uri_to_file(params['textDocument']['uri']), params['position']['line'], params['position']['character'], strip: true)
|
5
5
|
changes = {}
|
6
6
|
locs.each do |loc|
|
7
7
|
uri = file_to_uri(loc.filename)
|
data/lib/solargraph/library.rb
CHANGED
@@ -175,19 +175,27 @@ module Solargraph
|
|
175
175
|
# @param filename [String]
|
176
176
|
# @param line [Integer]
|
177
177
|
# @param column [Integer]
|
178
|
+
# @param strip [Boolean] Strip special characters from variable names
|
178
179
|
# @return [Array<Solargraph::Range>]
|
179
180
|
# @todo Take a Location instead of filename/line/column
|
180
|
-
def references_from filename, line, column
|
181
|
-
|
181
|
+
def references_from filename, line, column, strip: false
|
182
|
+
cursor = api_map.cursor_at(filename, Position.new(line, column))
|
183
|
+
clip = api_map.clip(cursor)
|
182
184
|
pins = clip.define
|
183
185
|
return [] if pins.empty?
|
184
186
|
result = []
|
185
187
|
pins.uniq.each do |pin|
|
186
188
|
(workspace.sources + open_file_hash.values).uniq.each do |source|
|
187
189
|
found = source.references(pin.name)
|
188
|
-
found.select do |loc|
|
190
|
+
found.select! do |loc|
|
189
191
|
referenced = definitions_at(loc.filename, loc.range.ending.line, loc.range.ending.character)
|
190
|
-
referenced.any?{|r| r
|
192
|
+
referenced.any?{|r| r == pin}
|
193
|
+
end
|
194
|
+
# HACK for language clients that exclude special characters from the start of variable names
|
195
|
+
if strip && match = cursor.word.match(/^[^a-z0-9_]+/)
|
196
|
+
found.map! do |loc|
|
197
|
+
Solargraph::Location.new(loc.filename, Solargraph::Range.from_to(loc.range.start.line, loc.range.start.column + match[0].length, loc.range.ending.line, loc.range.ending.column))
|
198
|
+
end
|
191
199
|
end
|
192
200
|
result.concat(found.sort{ |a, b|
|
193
201
|
a.range.start.line <=> b.range.start.line
|
data/lib/solargraph/pin.rb
CHANGED
@@ -36,7 +36,11 @@ module Solargraph
|
|
36
36
|
SYMBOL = 10
|
37
37
|
BLOCK = 11
|
38
38
|
BLOCK_PARAMETER = 12
|
39
|
+
REQUIRE_REFERENCE = 13
|
40
|
+
SUPERCLASS_REFERENCE = 14
|
41
|
+
INCLUDE_REFERENCE = 15
|
42
|
+
EXTEND_REFERENCE = 16
|
39
43
|
|
40
|
-
ROOT_PIN = Pin::Namespace.new(nil, '', '', '', :class, :public
|
44
|
+
ROOT_PIN = Pin::Namespace.new(nil, '', '', '', :class, :public)
|
41
45
|
end
|
42
46
|
end
|
data/lib/solargraph/pin/base.rb
CHANGED
@@ -60,21 +60,11 @@ module Solargraph
|
|
60
60
|
name.to_s
|
61
61
|
end
|
62
62
|
|
63
|
-
# @return [String]
|
64
|
-
def identifier
|
65
|
-
@identifier ||= "#{path}|#{name}"
|
66
|
-
end
|
67
|
-
|
68
63
|
# @return [Boolean]
|
69
64
|
def variable?
|
70
65
|
false
|
71
66
|
end
|
72
67
|
|
73
|
-
# @return [Boolean]
|
74
|
-
def yard_pin?
|
75
|
-
false
|
76
|
-
end
|
77
|
-
|
78
68
|
# @return [ComplexType]
|
79
69
|
def context
|
80
70
|
@context ||= ComplexType.parse(namespace || '')
|
@@ -44,7 +44,7 @@ module Solargraph
|
|
44
44
|
if @detail.nil?
|
45
45
|
@detail = ''
|
46
46
|
@detail += "(#{parameters.join(', ')}) " unless kind != Pin::METHOD or parameters.empty?
|
47
|
-
@detail += "=> #{return_complex_type
|
47
|
+
@detail += "=> #{return_complex_type}" unless return_complex_type.undefined?
|
48
48
|
@detail.strip!
|
49
49
|
end
|
50
50
|
return nil if @detail.empty?
|
@@ -10,15 +10,6 @@ module Solargraph
|
|
10
10
|
@documentation
|
11
11
|
end
|
12
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.all.empty?
|
20
|
-
end
|
21
|
-
|
22
13
|
def helper
|
23
14
|
@helper ||= Solargraph::Pin::Helper.new
|
24
15
|
end
|
@@ -1,29 +1,16 @@
|
|
1
1
|
module Solargraph
|
2
2
|
module Pin
|
3
3
|
class Namespace < Pin::Base
|
4
|
+
# @return [Symbol] :public or :private
|
4
5
|
attr_reader :visibility
|
5
6
|
|
7
|
+
# @return [Symbol] :class or :module
|
6
8
|
attr_reader :type
|
7
9
|
|
8
|
-
|
9
|
-
attr_reader :superclass_reference
|
10
|
-
|
11
|
-
def initialize location, namespace, name, comments, type, visibility, superclass
|
10
|
+
def initialize location, namespace, name, comments, type, visibility
|
12
11
|
super(location, namespace, name, comments)
|
13
12
|
@type = type
|
14
13
|
@visibility = visibility
|
15
|
-
# @superclass_reference = Reference.new(self, superclass) unless superclass.nil?
|
16
|
-
@superclass_reference = Pin::Reference.new(location, namespace, superclass) unless superclass.nil?
|
17
|
-
end
|
18
|
-
|
19
|
-
# @return [Array<Pin::Reference>]
|
20
|
-
def include_references
|
21
|
-
@include_references ||= []
|
22
|
-
end
|
23
|
-
|
24
|
-
# @return [Array<String>]
|
25
|
-
def extend_references
|
26
|
-
@extend_references ||= []
|
27
14
|
end
|
28
15
|
|
29
16
|
def kind
|
@@ -1,35 +1,22 @@
|
|
1
1
|
module Solargraph
|
2
2
|
module Pin
|
3
|
-
class Reference
|
4
|
-
|
5
|
-
|
3
|
+
class Reference < Base
|
4
|
+
autoload :Require, 'solargraph/pin/reference/require'
|
5
|
+
autoload :Superclass, 'solargraph/pin/reference/superclass'
|
6
|
+
autoload :Include, 'solargraph/pin/reference/include'
|
7
|
+
autoload :Extend, 'solargraph/pin/reference/extend'
|
6
8
|
|
7
|
-
# @return [String]
|
8
|
-
attr_reader :namespace
|
9
|
-
|
10
|
-
# @return [String]
|
11
|
-
attr_reader :name
|
12
|
-
|
13
|
-
# @param location [Location]
|
14
|
-
# @param namespace [String]
|
15
|
-
# @param name [String]
|
16
9
|
def initialize location, namespace, name
|
17
|
-
|
18
|
-
@namespace = namespace
|
19
|
-
@name = name
|
10
|
+
super(location, namespace, name, '')
|
20
11
|
end
|
21
12
|
|
22
|
-
# @
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
location == other.location and
|
30
|
-
namespace = other.namespace and
|
31
|
-
name == other.name
|
32
|
-
end
|
13
|
+
# @todo Should Reference.new be protected?
|
14
|
+
# class << self
|
15
|
+
# protected
|
16
|
+
# def new *args
|
17
|
+
# super
|
18
|
+
# end
|
19
|
+
# end
|
33
20
|
end
|
34
21
|
end
|
35
22
|
end
|