Spec-Zone.ru › Homebrew

Класс: Parser::TreeRewriter

Наследует:
AST::Processor
  • Object
  • AST::Processor
  • Parser::TreeRewriter
показать всё
Определён в:
sorbet/rbi/parser@3.3.8.0.rbi

Обзор

TreeRewriter предоставляет базовый API, упрощающий переписывание существующих AST. Он построен поверх AST::Processor и Source::TreeRewriter

Например, предположим, что вы хотите удалить токены do из оператора while. Это можно сделать следующим образом:

require 'parser/current'

class RemoveDo < Parser::TreeRewriter
  def on_while(node)
    # Check if the statement starts with "do"
    if node.location.begin.is?('do')
      remove(node.location.begin)
    end
  end
end

code = <<-EOF
while true do
  puts 'hello'
end
EOF

ast           = Parser::CurrentRuby.parse code
buffer        = Parser::Source::Buffer.new('(example)', source: code)
rewriter      = RemoveDo.new

# Rewrite the AST, returns a String with the new form.
puts rewriter.rewrite(buffer, ast)

В результате получится следующий код Ruby:

while true
  puts 'hello'
end

Имейте в виду, что TreeRewriter не заботится об отступах при вставке или замене кода, поэтому вам придётся позаботиться об этом самостоятельно.

См. также запись в блоге, в которой подробнее описаны средства переписывания.

source://parser//lib/parser/tree_rewriter.rb#51

Краткое описание методов экземпляра свернуть

  • #assignment?(node) ⇒ Boolean

    Возвращает true, если указанный узел является узлом присваивания, в противном случае возвращает false.

  • #insert_after(range, content) ⇒ Object

    Вставляет новый код после указанного диапазона исходного кода.

  • #insert_before(range, content) ⇒ Object

    Вставляет новый код перед указанным диапазоном исходного кода.

  • #remove(range) ⇒ Object

    Удаляет диапазон исходного кода.

  • #replace(range, content) ⇒ Object

    Заменяет код диапазона исходного кода range на content.

  • #rewrite(source_buffer, ast, **policy) ⇒ String

    Переписывает AST/буфер исходного кода и возвращает String, содержащую новую версию.

  • #wrap(range, before, after) ⇒ Object

    Обрамляет указанный диапазон исходного кода заданными значениями.

Методы, унаследованные от AST::Processor

#on_alias, #on_and, #on_and_asgn, #on_arg_expr, #on_args, #on_argument, #on_array, #on_array_pattern, #on_array_pattern_with_tail, #on_begin, #on_block, #on_block_pass, #on_blockarg_expr, #on_break, #on_case, #on_case_match, #on_casgn, #on_class, #on_const, #on_const_pattern, #on_csend, #on_def, #on_defined?, #on_defs, #on_dstr, #on_dsym, #on_eflipflop, #on_empty_else, #on_ensure, #on_erange, #on_find_pattern, #on_for, #on_forwarded_kwrestarg, #on_forwarded_restarg, #on_hash, #on_hash_pattern, #on_if, #on_if_guard, #on_iflipflop, #on_in_match, #on_in_pattern, #on_index, #on_indexasgn, #on_irange, #on_kwargs, #on_kwbegin, #on_kwsplat, #on_lambda, #on_masgn, #on_match_alt, #on_match_as, #on_match_current_line, #on_match_pattern, #on_match_pattern_p, #on_match_rest, #on_match_with_lvasgn, #on_mlhs, #on_module, #on_next, #on_not, #on_numblock, #on_op_asgn, #on_or, #on_or_asgn, #on_pair, #on_pin, #on_postexe, #on_preexe, #on_procarg0, #on_redo, #on_regexp, #on_resbody, #on_rescue, #on_restarg_expr, #on_retry, #on_return, #on_sclass, #on_send, #on_splat, #on_super, #on_undef, #on_unless_guard, #on_until, #on_until_post, #on_var, #on_vasgn, #on_when, #on_while, #on_while_post, #on_xstr, #on_yield, #process_regular_node

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

#assignment?(node) ⇒ Boolean

Возвращает true, если указанный узел является узлом присваивания, в противном случае возвращает false.

source://parser//lib/parser/tree_rewriter.rb#79

Параметры:

  • node (Parser::AST::Node)

Возвращает:

  • (Boolean)


7236
# File 'sorbet/rbi/parser@3.3.8.0.rbi', line 7236

def assignment?(node); end

#insert_after(range, content) ⇒ Object

Вставляет новый код после указанного диапазона исходного кода.

source://parser//lib/parser/tree_rewriter.rb#118

Параметры:

  • range (Parser::Source::Range)
  • content (String)


7245
# File 'sorbet/rbi/parser@3.3.8.0.rbi', line 7245

def insert_after(range, content); end

#insert_before(range, content) ⇒ Object

Вставляет новый код перед указанным диапазоном исходного кода.

source://parser//lib/parser/tree_rewriter.rb#108

Параметры:

  • range (Parser::Source::Range)
  • content (String)


7254
# File 'sorbet/rbi/parser@3.3.8.0.rbi', line 7254

def insert_before(range, content); end

#remove(range) ⇒ Object

Удаляет диапазон исходного кода.

source://parser//lib/parser/tree_rewriter.rb#88

Параметры:

  • range (Parser::Source::Range)


7262
# File 'sorbet/rbi/parser@3.3.8.0.rbi', line 7262

def remove(range); end

#replace(range, content) ⇒ Object

Заменяет код диапазона исходного кода range на content.

source://parser//lib/parser/tree_rewriter.rb#128

Параметры:

  • range (Parser::Source::Range)
  • content (String)


7271
# File 'sorbet/rbi/parser@3.3.8.0.rbi', line 7271

def replace(range, content); end

#rewrite(source_buffer, ast, **policy) ⇒ String

Переписывает AST/буфер исходного кода и возвращает String, содержащую новую версию.

source://parser//lib/parser/tree_rewriter.rb#62

Параметры:

  • source_buffer (Parser::Source::Buffer)
  • ast (Parser::AST::Node)
  • crossing_deletions:, (Symbol) —

    Аргументы политики different_replacements:, swallowed_insertions: для TreeRewriter (необязательные)

Возвращает:

  • (String)


7284
# File 'sorbet/rbi/parser@3.3.8.0.rbi', line 7284

def rewrite(source_buffer, ast, **policy); end

#wrap(range, before, after) ⇒ Object

Обрамляет указанный диапазон исходного кода заданными значениями.

source://parser//lib/parser/tree_rewriter.rb#98

Параметры:

  • range (Parser::Source::Range)
  • content (String)


7293
# File 'sorbet/rbi/parser@3.3.8.0.rbi', line 7293

def wrap(range, before, after); end

© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Parser/TreeRewriter.html

Spec-Zone.ru

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