Класс: 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
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
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
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
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
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
7284 | # File 'sorbet/rbi/parser@3.3.8.0.rbi', line 7284 def rewrite(source_buffer, ast, **policy); end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Parser/TreeRewriter.html