28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/steep/services/completion_provider/type_name.rb', line 28
def self.parse(buffer, line:, column:)
pos = buffer.loc_to_pos([line, column])
prefix = buffer.content[0...pos] or raise
prefix.reverse!
case prefix
when /\A((::\w+[A-Z])+(::)?)/
namespace = $1 or raise
NamespacePrefix.new(::RBS::Namespace.parse(namespace.reverse), namespace.size)
when /\A::/
NamespacePrefix.new(::RBS::Namespace.root, 2)
when /\A(\w*[A-Za-z_])((::\w+[A-Z])+(::)?)/
namespace = $1 or raise
identifier = $2 or raise
NamespacedIdentPrefix.new(::RBS::Namespace.parse(identifier.reverse), namespace.reverse, namespace.size + identifier.size)
when /\A(\w*[A-Za-z_])::/
namespace = $1 or raise
NamespacedIdentPrefix.new(::RBS::Namespace.root, namespace.reverse, namespace.size + 2)
when /\A(\w*[A-Za-z_])/
identifier = $1 or raise
RawIdentPrefix.new(identifier.reverse)
end
end
|