Spec-Zone.ru › Homebrew

Класс: 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

Примеры:

require 'parser/current'

p Parser::CurrentRuby.parse('[1, 2]').loc
# => #<Parser::Source::Map::Collection:0x007f14b80eccd8
#  @end=#<Source::Range (string) 5...6>,
#  @begin=#<Source::Range (string) 0...1>,
#  @expression=#<Source::Range (string) 0...6>>

Прямые известные подклассы

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

Параметры:

  • expression (Range)


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

Возвращает:

  • (Integer)


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

Возвращает:

  • (Range)


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

Возвращает:

  • (Integer)


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

Возвращает:

  • (Integer)


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

Возвращает:

  • (Integer)


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

Возвращает:

  • (Integer)


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

Возвращает:

  • (Parser::AST::Node)


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

Примеры:

require 'parser/current'

p Parser::CurrentRuby.parse('[1, 2]').loc.to_hash
# => {
#   :begin => #<Source::Range (string) 0...1>,
#   :end => #<Source::Range (string) 5...6>,
#   :expression => #<Source::Range (string) 0...6>
# }

Возвращает:

  • (Hash<Symbol, Parser::Source::Range>)


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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API