Module: Solargraph::Parser::ParserGem::ClassMethods
- Included in:
- Solargraph::Parser
- Defined in:
- lib/solargraph/parser/parser_gem/class_methods.rb
Instance Method Summary collapse
- #chain(*args) ⇒ Source::Chain
- #chain_string(*args) ⇒ Source::Chain
- #infer_literal_node_type(node) ⇒ String?
- #inner_node_references(name, top) ⇒ Array<AST::Node>
- #is_ast_node?(node) ⇒ Boolean
- #map(source) ⇒ Array(Array<Pin::Base>, Array<Pin::LocalVariable>)
- #node_range(node) ⇒ Range
-
#parse(code, filename = nil, starting_line = 0) ⇒ Parser::AST::Node
@sg-ignore need to understand that raise does not return.
- #parse_with_comments(code, filename = nil, starting_line = 0) ⇒ Array(Parser::AST::Node, Hash{Integer => Solargraph::Parser::Snippet})
- #parser ⇒ ::Parser::Base
- #process_node(*args) ⇒ Array(Array<Pin::Base>, Array<Pin::Base>)
- #references(source, name) ⇒ Array<Location>
- #string_ranges(node) ⇒ Array<Range>
- #version ⇒ Integer
Instance Method Details
#chain(*args) ⇒ Source::Chain
98 99 100 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 98 def chain *args NodeChainer.chain(*args) end |
#chain_string(*args) ⇒ Source::Chain
103 104 105 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 103 def chain_string *args NodeChainer.load_string(*args) end |
#infer_literal_node_type(node) ⇒ String?
114 115 116 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 114 def infer_literal_node_type node NodeMethods.infer_literal_node_type node end |
#inner_node_references(name, top) ⇒ Array<AST::Node>
87 88 89 90 91 92 93 94 95 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 87 def inner_node_references name, top # @type [Array<AST::Node>] result = [] if top.is_a?(AST::Node) && top.to_s.include?(":#{name}") result.push top if top.children.any? { |c| c.to_s == name } top.children.each { |c| result.concat inner_node_references(name, c) } end result end |
#is_ast_node?(node) ⇒ Boolean
125 126 127 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 125 def is_ast_node? node node.is_a?(::Parser::AST::Node) end |
#map(source) ⇒ Array(Array<Pin::Base>, Array<Pin::LocalVariable>)
44 45 46 47 48 49 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 44 def map source # @sg-ignore Need to add nil check here pins, locals, ivars = NodeProcessor.process(source.node, Region.new(source: source)) pins.concat(ivars) [pins, locals] end |
#node_range(node) ⇒ Range
131 132 133 134 135 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 131 def node_range node st = Position.new(node.loc.line, node.loc.column) en = Position.new(node.loc.last_line, node.loc.last_column) Range.new(st, en) end |
#parse(code, filename = nil, starting_line = 0) ⇒ Parser::AST::Node
@sg-ignore need to understand that raise does not return
26 27 28 29 30 31 32 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 26 def parse code, filename = nil, starting_line = 0 buffer = ::Parser::Source::Buffer.new(filename, starting_line) buffer.source = code parser.parse(buffer) rescue ::Parser::SyntaxError, ::Parser::UnknownEncodingInMagicComment => e raise Parser::SyntaxError, e. end |
#parse_with_comments(code, filename = nil, starting_line = 0) ⇒ Array(Parser::AST::Node, Hash{Integer => Solargraph::Parser::Snippet})
15 16 17 18 19 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 15 def parse_with_comments code, filename = nil, starting_line = 0 node = parse(code, filename, starting_line) comments = CommentRipper.new(code, filename, 0).parse [node, comments] end |
#parser ⇒ ::Parser::Base
35 36 37 38 39 40 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 35 def parser @parser ||= Prism::Translation::Parser.new(FlawedBuilder.new).tap do |parser| parser.diagnostics.all_errors_are_fatal = true parser.diagnostics.ignore_warnings = true end end |
#process_node(*args) ⇒ Array(Array<Pin::Base>, Array<Pin::Base>)
108 109 110 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 108 def process_node *args Solargraph::Parser::NodeProcessor.process(*args) end |
#references(source, name) ⇒ Array<Location>
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 54 def references source, name if name.end_with?('=') reg = /#{Regexp.escape name[0..-2]}\s*=/ # @param code [String] # @param offset [Integer] # @return [Array(Integer, Integer), Array(nil, nil)] # @sg-ignore Need to add nil check here extract_offset = ->(code, offset) { reg.match(code, offset).offset(0) } else # @param code [String] # @param offset [Integer] # @return [Array(Integer, Integer), Array(nil, nil)] # @sg-ignore Need to add nil check here extract_offset = ->(code, offset) { [soff = code.index(name, offset), soff + name.length] } end inner_node_references(name, source.node).map do |n| rng = Range.from_node(n) # @sg-ignore Need to add nil check here offset = Position.to_offset(source.code, rng.start) soff, eoff = extract_offset[source.code, offset] Location.new( source.filename, Range.new( Position.from_offset(source.code, soff), Position.from_offset(source.code, eoff) ) ) end end |
#string_ranges(node) ⇒ Array<Range>
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 139 def string_ranges node return [] unless is_ast_node?(node) result = [] # @sg-ignore Translate to something flow sensitive typing understands result.push Range.from_node(node) if node.type == :str # @sg-ignore Translate to something flow sensitive typing understands node.children.each do |child| result.concat string_ranges(child) end # @sg-ignore Translate to something flow sensitive typing understands if node.type == :dstr && node.children.last.nil? # @sg-ignore Translate to something flow sensitive typing understands last = node.children[-2] # @sg-ignore Need to add nil check here unless last.nil? rng = Range.from_node(last) # @sg-ignore Need to add nil check here pos = Position.new(rng.ending.line, rng.ending.column - 1) result.push Range.new(pos, pos) end end result end |
#version ⇒ Integer
119 120 121 |
# File 'lib/solargraph/parser/parser_gem/class_methods.rb', line 119 def version parser.version end |