Класс: Parser::Source::Map
- Наследует:
- Object
- Object
- Parser::Source::Map
- Определен в:
- sorbet/rbi/parser@3.3.8.0.rbi
Обзор
Map связывает узлы AST с исходным кодом, из которого они были разобраны. Точнее, Map или его подкласс содержит набор диапазонов:
-
expression: наименьший диапазон, включающий весь исходный код, соответствующий узлу, и все диапазоныexpressionего дочерних элементов. - другие диапазоны (
begin,end,operator, ...): диапазоны, специфичные для узла и указывающие на различные интересующие токены, соответствующие узлу.
Обратите внимание, что карта Heredoc — единственная, у которой expression не включает другие диапазоны. Она охватывает только маркер heredoc (<<HERE), но не сам документ here.
Все диапазоны, кроме expression, определяются подклассами Map.
Диапазоны (кроме expression) могут быть nil, если соответствующий токен отсутствует в исходном коде. Например, у хеша могут отсутствовать открывающие и закрывающие фигурные скобки, и в его карте исходного кода они тоже будут отсутствовать.
p Parser::CurrentRuby.parse('[1 => 2]').children[0].loc
# => <Parser::Source::Map::Collection:0x007f5492b547d8
# @end=nil, @begin=nil,
# @expression=#<Source::Range (string) 1...7>>
В документе AST_FORMAT описано, как диапазоны связаны с токенами исходного кода. Например, запись
(array (int 1) (int 2))
"[1, 2]"
^ begin
^ end
~~~~~~ expression
означает, что если node является (array (int 1) (int 2)) AST::Node, то node.loc поддерживает begin, end и expression, а node.loc.begin возвращает диапазон, указывающий на открывающую скобку, и так далее.
Если вы хотите написать код, полиморфный относительно карты исходного кода (то есть принимающий несколько подклассов Map), используйте respond_to? вместо is_a?, чтобы проверить, содержит ли карта нужный вам диапазон. Конкретные подклассы Map могут меняться между версиями, но их интерфейсы останутся совместимыми.
Визуализировать карты исходного кода можно с помощью инструмента командной строки ruby-parse -E.
source://parser//lib/parser/source/map.rb#70
Прямые известные подклассы
Collection, Condition, Constant, Definition, For, Heredoc, Index, Keyword, MethodDefinition, ObjcKwarg, Operator, RescueBody, Send, Ternary, Variable
Определено в пространстве имен
Классы: Collection, Condition, Constant, Definition, For, Heredoc, Index, Keyword, MethodDefinition, ObjcKwarg, Operator, RescueBody, Send, Ternary, Variable
Краткое описание методов свернуть
- #column ⇒ Integer
Краткая запись для
self.expression.column. - #expression ⇒ Range
source://parser//lib/parser/source/map.rb#72.
- #first_line ⇒ Integer
Краткая запись для
self.expression.line. - #initialize(expression) ⇒ Map конструктор
source://parser//lib/parser/source/map.rb#76.
- #last_column ⇒ Integer
Краткая запись для
self.expression.last_column. - #last_line ⇒ Integer
Краткая запись для
self.expression.last_line. - #line ⇒ Integer
Краткая запись для
self.expression.line. - #node ⇒ Parser::AST::Node
Узел, описываемый этой картой.
- #node=(node) ⇒ Object приватный
source://parser//lib/parser/source/map.rb#89.
- #to_hash ⇒ Hash<Symbol, Parser::Source::Range>
Преобразует эту карту исходного кода в хеш с ключами, соответствующими диапазонам.
- #with_expression(expression_l) ⇒ Object приватный
source://parser//lib/parser/source/map.rb#132.
Подробное описание конструкторов
#initialize(expression) ⇒ Map
source://parser//lib/parser/source/map.rb#76
5595 | # File 'sorbet/rbi/parser@3.3.8.0.rbi', line 5595 def initialize(expression); end |
Подробное описание методов экземпляра
#column ⇒ Integer
Краткая форма для self.expression.column.
source://parser//lib/parser/source/map.rb#109
5611 | # File 'sorbet/rbi/parser@3.3.8.0.rbi', line 5611 def column; end |
#expression ⇒ Range
source://parser//lib/parser/source/map.rb#72
5617 | # File 'sorbet/rbi/parser@3.3.8.0.rbi', line 5617 def expression; end |
#first_line ⇒ Integer
Краткая форма для self.expression.line.
source://parser//lib/parser/source/map.rb#99
5625 | # File 'sorbet/rbi/parser@3.3.8.0.rbi', line 5625 def first_line; end |
#last_column ⇒ Integer
Краткая форма для self.expression.last_column.
source://parser//lib/parser/source/map.rb#125
5633 | # File 'sorbet/rbi/parser@3.3.8.0.rbi', line 5633 def last_column; end |
#last_line ⇒ Integer
Краткая форма для self.expression.last_line.
source://parser//lib/parser/source/map.rb#117
5641 | # File 'sorbet/rbi/parser@3.3.8.0.rbi', line 5641 def last_line; end |
#line ⇒ Integer
Краткая форма для self.expression.line.
source://parser//lib/parser/source/map.rb#99
5649 | # File 'sorbet/rbi/parser@3.3.8.0.rbi', line 5649 def line; end |
#node ⇒ Parser::AST::Node
Узел, описываемый этой картой. Узлы и карты соответствуют друг другу взаимно однозначно.
source://parser//lib/parser/source/map.rb#71
5657 | # File 'sorbet/rbi/parser@3.3.8.0.rbi', line 5657 def node; end |
#node=(node) ⇒ Object
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
source://parser//lib/parser/source/map.rb#89
5662 | # File 'sorbet/rbi/parser@3.3.8.0.rbi', line 5662 def node=(node); end |
#to_hash ⇒ Hash<Symbol, Parser::Source::Range>
Преобразует эту карту исходного кода в хеш с ключами, соответствующими диапазонам. Например, если вызвать этот метод для экземпляра Collection, который добавляет диапазоны begin и end, результирующий хеш будет содержать ключи :expression, :begin и :end.
source://parser//lib/parser/source/map.rb#166
5682 | # File 'sorbet/rbi/parser@3.3.8.0.rbi', line 5682 def to_hash; end |
#with_expression(expression_l) ⇒ Object
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
source://parser//lib/parser/source/map.rb#132
5687 | # File 'sorbet/rbi/parser@3.3.8.0.rbi', line 5687 def with_expression(expression_l); end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Parser/Source/Map.html