errors: - ALIAS_ARGUMENT - ALIAS_ARGUMENT_NUMBERED_REFERENCE - AMPAMPEQ_MULTI_ASSIGN - ARGUMENT_AFTER_BLOCK - ARGUMENT_AFTER_FORWARDING_ELLIPSES - ARGUMENT_BARE_HASH - ARGUMENT_BLOCK_FORWARDING - ARGUMENT_BLOCK_MULTI - ARGUMENT_CONFLICT_AMPERSAND - ARGUMENT_CONFLICT_STAR - ARGUMENT_CONFLICT_STAR_STAR - ARGUMENT_FORMAL_CLASS - ARGUMENT_FORMAL_CONSTANT - ARGUMENT_FORMAL_GLOBAL - ARGUMENT_FORMAL_IVAR - ARGUMENT_FORWARDING_UNBOUND - ARGUMENT_NO_FORWARDING_AMPERSAND - ARGUMENT_NO_FORWARDING_ELLIPSES - ARGUMENT_NO_FORWARDING_STAR - ARGUMENT_NO_FORWARDING_STAR_STAR - ARGUMENT_SPLAT_AFTER_ASSOC_SPLAT - ARGUMENT_SPLAT_AFTER_SPLAT - ARGUMENT_TERM_PAREN - ARGUMENT_UNEXPECTED_BLOCK - ARRAY_ELEMENT - ARRAY_EXPRESSION - ARRAY_EXPRESSION_AFTER_STAR - ARRAY_SEPARATOR - ARRAY_TERM - BEGIN_LONELY_ELSE - BEGIN_TERM - BEGIN_UPCASE_BRACE - BEGIN_UPCASE_TERM - BEGIN_UPCASE_TOPLEVEL - BLOCK_PARAM_LOCAL_VARIABLE - BLOCK_PARAM_PIPE_TERM - BLOCK_TERM_BRACE - BLOCK_TERM_END - CANNOT_PARSE_EXPRESSION - CANNOT_PARSE_STRING_PART - CASE_EXPRESSION_AFTER_CASE - CASE_EXPRESSION_AFTER_WHEN - CASE_MATCH_MISSING_PREDICATE - CASE_MISSING_CONDITIONS - CASE_TERM - CLASS_IN_METHOD - CLASS_NAME - CLASS_SUPERCLASS - CLASS_TERM - CLASS_UNEXPECTED_END - CLASS_VARIABLE_BARE - CONDITIONAL_ELSIF_PREDICATE - CONDITIONAL_IF_PREDICATE - CONDITIONAL_PREDICATE_TERM - CONDITIONAL_TERM - CONDITIONAL_TERM_ELSE - CONDITIONAL_UNLESS_PREDICATE - CONDITIONAL_UNTIL_PREDICATE - CONDITIONAL_WHILE_PREDICATE - CONSTANT_PATH_COLON_COLON_CONSTANT - DEF_ENDLESS - DEF_ENDLESS_SETTER - DEF_NAME - DEF_PARAMS_TERM - DEF_PARAMS_TERM_PAREN - DEF_RECEIVER - DEF_RECEIVER_TERM - DEF_TERM - DEFINED_EXPRESSION - EMBDOC_TERM - EMBEXPR_END - EMBVAR_INVALID - END_UPCASE_BRACE - END_UPCASE_TERM - ESCAPE_INVALID_CONTROL - ESCAPE_INVALID_CONTROL_REPEAT - ESCAPE_INVALID_HEXADECIMAL - ESCAPE_INVALID_META - ESCAPE_INVALID_META_REPEAT - ESCAPE_INVALID_UNICODE - ESCAPE_INVALID_UNICODE_CM_FLAGS - ESCAPE_INVALID_UNICODE_LIST - ESCAPE_INVALID_UNICODE_LITERAL - ESCAPE_INVALID_UNICODE_LONG - ESCAPE_INVALID_UNICODE_SHORT - ESCAPE_INVALID_UNICODE_TERM - EXPECT_ARGUMENT - EXPECT_EOL_AFTER_STATEMENT - EXPECT_EXPRESSION_AFTER_AMPAMPEQ - EXPECT_EXPRESSION_AFTER_COMMA - EXPECT_EXPRESSION_AFTER_EQUAL - EXPECT_EXPRESSION_AFTER_LESS_LESS - EXPECT_EXPRESSION_AFTER_LPAREN - EXPECT_EXPRESSION_AFTER_OPERATOR - EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ - EXPECT_EXPRESSION_AFTER_QUESTION - EXPECT_EXPRESSION_AFTER_SPLAT - EXPECT_EXPRESSION_AFTER_SPLAT_HASH - EXPECT_EXPRESSION_AFTER_STAR - EXPECT_FOR_DELIMITER - EXPECT_IDENT_REQ_PARAMETER - EXPECT_IN_DELIMITER - EXPECT_LPAREN_REQ_PARAMETER - EXPECT_MESSAGE - EXPECT_RBRACKET - EXPECT_RPAREN - EXPECT_RPAREN_AFTER_MULTI - EXPECT_RPAREN_REQ_PARAMETER - EXPECT_SINGLETON_CLASS_DELIMITER - EXPECT_STRING_CONTENT - EXPECT_WHEN_DELIMITER - EXPRESSION_BARE_HASH - EXPRESSION_NOT_WRITABLE - EXPRESSION_NOT_WRITABLE_ENCODING - EXPRESSION_NOT_WRITABLE_FALSE - EXPRESSION_NOT_WRITABLE_FILE - EXPRESSION_NOT_WRITABLE_LINE - EXPRESSION_NOT_WRITABLE_NIL - EXPRESSION_NOT_WRITABLE_NUMBERED - EXPRESSION_NOT_WRITABLE_SELF - EXPRESSION_NOT_WRITABLE_TRUE - FLOAT_PARSE - FOR_COLLECTION - FOR_IN - FOR_INDEX - FOR_TERM - GLOBAL_VARIABLE_BARE - HASH_EXPRESSION_AFTER_LABEL - HASH_KEY - HASH_ROCKET - HASH_TERM - HASH_VALUE - HEREDOC_IDENTIFIER - HEREDOC_TERM - INCOMPLETE_QUESTION_MARK - INCOMPLETE_VARIABLE_CLASS - INCOMPLETE_VARIABLE_CLASS_3_3 - INCOMPLETE_VARIABLE_INSTANCE - INCOMPLETE_VARIABLE_INSTANCE_3_3 - INSTANCE_VARIABLE_BARE - INVALID_BLOCK_EXIT - INVALID_CHARACTER - INVALID_COMMA - INVALID_ENCODING_MAGIC_COMMENT - INVALID_ESCAPE_CHARACTER - INVALID_FLOAT_EXPONENT - INVALID_LOCAL_VARIABLE_READ - INVALID_LOCAL_VARIABLE_WRITE - INVALID_MULTIBYTE_CHAR - INVALID_MULTIBYTE_CHARACTER - INVALID_MULTIBYTE_ESCAPE - INVALID_NUMBER_BINARY - INVALID_NUMBER_DECIMAL - INVALID_NUMBER_FRACTION - INVALID_NUMBER_HEXADECIMAL - INVALID_NUMBER_OCTAL - INVALID_NUMBER_UNDERSCORE_INNER - INVALID_NUMBER_UNDERSCORE_TRAILING - INVALID_PERCENT - INVALID_PERCENT_EOF - INVALID_PRINTABLE_CHARACTER - INVALID_RETRY_AFTER_ELSE - INVALID_RETRY_AFTER_ENSURE - INVALID_RETRY_WITHOUT_RESCUE - INVALID_SYMBOL - INVALID_VARIABLE_GLOBAL - INVALID_VARIABLE_GLOBAL_3_3 - INVALID_YIELD - IT_NOT_ALLOWED_NUMBERED - IT_NOT_ALLOWED_ORDINARY - LAMBDA_OPEN - LAMBDA_TERM_BRACE - LAMBDA_TERM_END - LIST_I_LOWER_ELEMENT - LIST_I_LOWER_TERM - LIST_I_UPPER_ELEMENT - LIST_I_UPPER_TERM - LIST_W_LOWER_ELEMENT - LIST_W_LOWER_TERM - LIST_W_UPPER_ELEMENT - LIST_W_UPPER_TERM - MALLOC_FAILED - MIXED_ENCODING - MODULE_IN_METHOD - MODULE_NAME - MODULE_TERM - MULTI_ASSIGN_MULTI_SPLATS - MULTI_ASSIGN_UNEXPECTED_REST - NESTING_TOO_DEEP - NO_LOCAL_VARIABLE - NON_ASSOCIATIVE_OPERATOR - NOT_EXPRESSION - NUMBER_LITERAL_UNDERSCORE - NUMBERED_PARAMETER_INNER_BLOCK - NUMBERED_PARAMETER_IT - NUMBERED_PARAMETER_ORDINARY - NUMBERED_PARAMETER_OUTER_BLOCK - OPERATOR_MULTI_ASSIGN - OPERATOR_WRITE_ARGUMENTS - OPERATOR_WRITE_BLOCK - PARAMETER_ASSOC_SPLAT_MULTI - PARAMETER_BLOCK_MULTI - PARAMETER_CIRCULAR - PARAMETER_FORWARDING_AFTER_REST - PARAMETER_METHOD_NAME - PARAMETER_NAME_DUPLICATED - PARAMETER_NO_DEFAULT - PARAMETER_NO_DEFAULT_KW - PARAMETER_NUMBERED_RESERVED - PARAMETER_ORDER - PARAMETER_SPLAT_MULTI - PARAMETER_STAR - PARAMETER_UNEXPECTED_FWD - PARAMETER_UNEXPECTED_NO_KW - PARAMETER_WILD_LOOSE_COMMA - PATTERN_ARRAY_MULTIPLE_RESTS - PATTERN_CAPTURE_DUPLICATE - PATTERN_EXPRESSION_AFTER_BRACKET - PATTERN_EXPRESSION_AFTER_COMMA - PATTERN_EXPRESSION_AFTER_HROCKET - PATTERN_EXPRESSION_AFTER_IN - PATTERN_EXPRESSION_AFTER_KEY - PATTERN_EXPRESSION_AFTER_PAREN - PATTERN_EXPRESSION_AFTER_PIN - PATTERN_EXPRESSION_AFTER_PIPE - PATTERN_EXPRESSION_AFTER_RANGE - PATTERN_EXPRESSION_AFTER_REST - PATTERN_FIND_MISSING_INNER - PATTERN_HASH_IMPLICIT - PATTERN_HASH_KEY - PATTERN_HASH_KEY_DUPLICATE - PATTERN_HASH_KEY_INTERPOLATED - PATTERN_HASH_KEY_LABEL - PATTERN_HASH_KEY_LOCALS - PATTERN_IDENT_AFTER_HROCKET - PATTERN_LABEL_AFTER_COMMA - PATTERN_REST - PATTERN_TERM_BRACE - PATTERN_TERM_BRACKET - PATTERN_TERM_PAREN - PIPEPIPEEQ_MULTI_ASSIGN - REGEXP_ENCODING_OPTION_MISMATCH - REGEXP_INCOMPAT_CHAR_ENCODING - REGEXP_INVALID_UNICODE_RANGE - REGEXP_NON_ESCAPED_MBC - REGEXP_PARSE_ERROR - REGEXP_TERM - REGEXP_UNKNOWN_OPTIONS - REGEXP_UTF8_CHAR_NON_UTF8_REGEXP - RESCUE_EXPRESSION - RESCUE_MODIFIER_VALUE - RESCUE_TERM - RESCUE_VARIABLE - RETURN_INVALID - SCRIPT_NOT_FOUND - SINGLETON_FOR_LITERALS - STATEMENT_ALIAS - STATEMENT_POSTEXE_END - STATEMENT_PREEXE_BEGIN - STATEMENT_UNDEF - STRING_CONCATENATION - STRING_INTERPOLATED_TERM - STRING_LITERAL_EOF - STRING_LITERAL_TERM - SYMBOL_INVALID - SYMBOL_TERM_DYNAMIC - SYMBOL_TERM_INTERPOLATED - TERNARY_COLON - TERNARY_EXPRESSION_FALSE - TERNARY_EXPRESSION_TRUE - UNARY_DISALLOWED - UNARY_RECEIVER - UNDEF_ARGUMENT - UNEXPECTED_BLOCK_ARGUMENT - UNEXPECTED_INDEX_BLOCK - UNEXPECTED_INDEX_KEYWORDS - UNEXPECTED_LABEL - UNEXPECTED_MULTI_WRITE - UNEXPECTED_RANGE_OPERATOR - UNEXPECTED_SAFE_NAVIGATION - UNEXPECTED_TOKEN_CLOSE_CONTEXT - UNEXPECTED_TOKEN_IGNORE - UNTIL_TERM - VOID_EXPRESSION - WHILE_TERM - WRITE_TARGET_IN_METHOD - WRITE_TARGET_READONLY - WRITE_TARGET_UNEXPECTED - XSTRING_TERM warnings: - AMBIGUOUS_BINARY_OPERATOR - AMBIGUOUS_FIRST_ARGUMENT_MINUS - AMBIGUOUS_FIRST_ARGUMENT_PLUS - AMBIGUOUS_PREFIX_AMPERSAND - AMBIGUOUS_PREFIX_STAR - AMBIGUOUS_PREFIX_STAR_STAR - AMBIGUOUS_SLASH - COMPARISON_AFTER_COMPARISON - DOT_DOT_DOT_EOL - EQUAL_IN_CONDITIONAL - EQUAL_IN_CONDITIONAL_3_3 - END_IN_METHOD - DUPLICATED_HASH_KEY - DUPLICATED_WHEN_CLAUSE - FLOAT_OUT_OF_RANGE - IGNORED_FROZEN_STRING_LITERAL - INDENTATION_MISMATCH - INTEGER_IN_FLIP_FLOP - INVALID_CHARACTER - INVALID_MAGIC_COMMENT_VALUE - INVALID_NUMBERED_REFERENCE - KEYWORD_EOL - LITERAL_IN_CONDITION_DEFAULT - LITERAL_IN_CONDITION_VERBOSE - SHAREABLE_CONSTANT_VALUE_LINE - SHEBANG_CARRIAGE_RETURN - UNEXPECTED_CARRIAGE_RETURN - UNREACHABLE_STATEMENT - UNUSED_LOCAL_VARIABLE - VOID_STATEMENT tokens: - name: EOF value: 1 comment: final token in the file - name: MISSING comment: "a token that was expected but not found" - name: NOT_PROVIDED comment: "a token that was not present but it is okay" - name: AMPERSAND comment: "&" - name: AMPERSAND_AMPERSAND comment: "&&" - name: AMPERSAND_AMPERSAND_EQUAL comment: "&&=" - name: AMPERSAND_DOT comment: "&." - name: AMPERSAND_EQUAL comment: "&=" - name: BACKTICK comment: "`" - name: BACK_REFERENCE comment: "a back reference" - name: BANG comment: "! or !@" - name: BANG_EQUAL comment: "!=" - name: BANG_TILDE comment: "!~" - name: BRACE_LEFT comment: "{" - name: BRACE_RIGHT comment: "}" - name: BRACKET_LEFT comment: "[" - name: BRACKET_LEFT_ARRAY comment: "[ for the beginning of an array" - name: BRACKET_LEFT_RIGHT comment: "[]" - name: BRACKET_LEFT_RIGHT_EQUAL comment: "[]=" - name: BRACKET_RIGHT comment: "]" - name: CARET comment: "^" - name: CARET_EQUAL comment: "^=" - name: CHARACTER_LITERAL comment: "a character literal" - name: CLASS_VARIABLE comment: "a class variable" - name: COLON comment: ":" - name: COLON_COLON comment: "::" - name: COMMA comment: "," - name: COMMENT comment: "a comment" - name: CONSTANT comment: "a constant" - name: DOT comment: "the . call operator" - name: DOT_DOT comment: "the .. range operator" - name: DOT_DOT_DOT comment: "the ... range operator or forwarding parameter" - name: EMBDOC_BEGIN comment: "=begin" - name: EMBDOC_END comment: "=end" - name: EMBDOC_LINE comment: "a line inside of embedded documentation" - name: EMBEXPR_BEGIN comment: "#{" - name: EMBEXPR_END comment: "}" - name: EMBVAR comment: "#" - name: EQUAL comment: "=" - name: EQUAL_EQUAL comment: "==" - name: EQUAL_EQUAL_EQUAL comment: "===" - name: EQUAL_GREATER comment: "=>" - name: EQUAL_TILDE comment: "=~" - name: FLOAT comment: "a floating point number" - name: FLOAT_IMAGINARY comment: "a floating pointer number with an imaginary suffix" - name: FLOAT_RATIONAL comment: "a floating pointer number with a rational suffix" - name: FLOAT_RATIONAL_IMAGINARY comment: "a floating pointer number with a rational and imaginary suffix" - name: GLOBAL_VARIABLE comment: "a global variable" - name: GREATER comment: ">" - name: GREATER_EQUAL comment: ">=" - name: GREATER_GREATER comment: ">>" - name: GREATER_GREATER_EQUAL comment: ">>=" - name: HEREDOC_END comment: "the end of a heredoc" - name: HEREDOC_START comment: "the start of a heredoc" - name: IDENTIFIER comment: "an identifier" - name: IGNORED_NEWLINE comment: "an ignored newline" - name: INSTANCE_VARIABLE comment: "an instance variable" - name: INTEGER comment: "an integer (any base)" - name: INTEGER_IMAGINARY comment: "an integer with an imaginary suffix" - name: INTEGER_RATIONAL comment: "an integer with a rational suffix" - name: INTEGER_RATIONAL_IMAGINARY comment: "an integer with a rational and imaginary suffix" - name: KEYWORD_ALIAS comment: "alias" - name: KEYWORD_AND comment: "and" - name: KEYWORD_BEGIN comment: "begin" - name: KEYWORD_BEGIN_UPCASE comment: "BEGIN" - name: KEYWORD_BREAK comment: "break" - name: KEYWORD_CASE comment: "case" - name: KEYWORD_CLASS comment: "class" - name: KEYWORD_DEF comment: "def" - name: KEYWORD_DEFINED comment: "defined?" - name: KEYWORD_DO comment: "do" - name: KEYWORD_DO_LOOP comment: "do keyword for a predicate in a while, until, or for loop" - name: KEYWORD_ELSE comment: "else" - name: KEYWORD_ELSIF comment: "elsif" - name: KEYWORD_END comment: "end" - name: KEYWORD_END_UPCASE comment: "END" - name: KEYWORD_ENSURE comment: "ensure" - name: KEYWORD_FALSE comment: "false" - name: KEYWORD_FOR comment: "for" - name: KEYWORD_IF comment: "if" - name: KEYWORD_IF_MODIFIER comment: "if in the modifier form" - name: KEYWORD_IN comment: "in" - name: KEYWORD_MODULE comment: "module" - name: KEYWORD_NEXT comment: "next" - name: KEYWORD_NIL comment: "nil" - name: KEYWORD_NOT comment: "not" - name: KEYWORD_OR comment: "or" - name: KEYWORD_REDO comment: "redo" - name: KEYWORD_RESCUE comment: "rescue" - name: KEYWORD_RESCUE_MODIFIER comment: "rescue in the modifier form" - name: KEYWORD_RETRY comment: "retry" - name: KEYWORD_RETURN comment: "return" - name: KEYWORD_SELF comment: "self" - name: KEYWORD_SUPER comment: "super" - name: KEYWORD_THEN comment: "then" - name: KEYWORD_TRUE comment: "true" - name: KEYWORD_UNDEF comment: "undef" - name: KEYWORD_UNLESS comment: "unless" - name: KEYWORD_UNLESS_MODIFIER comment: "unless in the modifier form" - name: KEYWORD_UNTIL comment: "until" - name: KEYWORD_UNTIL_MODIFIER comment: "until in the modifier form" - name: KEYWORD_WHEN comment: "when" - name: KEYWORD_WHILE comment: "while" - name: KEYWORD_WHILE_MODIFIER comment: "while in the modifier form" - name: KEYWORD_YIELD comment: "yield" - name: KEYWORD___ENCODING__ comment: "__ENCODING__" - name: KEYWORD___FILE__ comment: "__FILE__" - name: KEYWORD___LINE__ comment: "__LINE__" - name: LABEL comment: "a label" - name: LABEL_END comment: "the end of a label" - name: LAMBDA_BEGIN comment: "{" - name: LESS comment: "<" - name: LESS_EQUAL comment: "<=" - name: LESS_EQUAL_GREATER comment: "<=>" - name: LESS_LESS comment: "<<" - name: LESS_LESS_EQUAL comment: "<<=" - name: METHOD_NAME comment: "a method name" - name: MINUS comment: "-" - name: MINUS_EQUAL comment: "-=" - name: MINUS_GREATER comment: "->" - name: NEWLINE comment: "a newline character outside of other tokens" - name: NUMBERED_REFERENCE comment: "a numbered reference to a capture group in the previous regular expression match" - name: PARENTHESIS_LEFT comment: "(" - name: PARENTHESIS_LEFT_PARENTHESES comment: "( for a parentheses node" - name: PARENTHESIS_RIGHT comment: ")" - name: PERCENT comment: "%" - name: PERCENT_EQUAL comment: "%=" - name: PERCENT_LOWER_I comment: "%i" - name: PERCENT_LOWER_W comment: "%w" - name: PERCENT_LOWER_X comment: "%x" - name: PERCENT_UPPER_I comment: "%I" - name: PERCENT_UPPER_W comment: "%W" - name: PIPE comment: "|" - name: PIPE_EQUAL comment: "|=" - name: PIPE_PIPE comment: "||" - name: PIPE_PIPE_EQUAL comment: "||=" - name: PLUS comment: "+" - name: PLUS_EQUAL comment: "+=" - name: QUESTION_MARK comment: "?" - name: REGEXP_BEGIN comment: "the beginning of a regular expression" - name: REGEXP_END comment: "the end of a regular expression" - name: SEMICOLON comment: ";" - name: SLASH comment: "/" - name: SLASH_EQUAL comment: "/=" - name: STAR comment: "*" - name: STAR_EQUAL comment: "*=" - name: STAR_STAR comment: "**" - name: STAR_STAR_EQUAL comment: "**=" - name: STRING_BEGIN comment: "the beginning of a string" - name: STRING_CONTENT comment: "the contents of a string" - name: STRING_END comment: "the end of a string" - name: SYMBOL_BEGIN comment: "the beginning of a symbol" - name: TILDE comment: "~ or ~@" - name: UAMPERSAND comment: "unary &" - name: UCOLON_COLON comment: "unary ::" - name: UDOT_DOT comment: "unary .. operator" - name: UDOT_DOT_DOT comment: "unary ... operator" - name: UMINUS comment: "-@" - name: UMINUS_NUM comment: "-@ for a number" - name: UPLUS comment: "+@" - name: USTAR comment: "unary *" - name: USTAR_STAR comment: "unary **" - name: WORDS_SEP comment: "a separator between words in a list" - name: __END__ comment: "marker for the point in the file at which the parser should stop" flags: - name: ArgumentsNodeFlags values: - name: CONTAINS_FORWARDING comment: "if the arguments contain forwarding" - name: CONTAINS_KEYWORDS comment: "if the arguments contain keywords" - name: CONTAINS_KEYWORD_SPLAT comment: "if the arguments contain a keyword splat" - name: CONTAINS_SPLAT comment: "if the arguments contain a splat" - name: CONTAINS_MULTIPLE_SPLATS comment: "if the arguments contain multiple splats" comment: Flags for arguments nodes. - name: ArrayNodeFlags values: - name: CONTAINS_SPLAT comment: "if array contains splat nodes" comment: Flags for array nodes. - name: CallNodeFlags values: - name: SAFE_NAVIGATION comment: "&. operator" - name: VARIABLE_CALL comment: "a call that could have been a local variable" - name: ATTRIBUTE_WRITE comment: "a call that is an attribute write, so the value being written should be returned" - name: IGNORE_VISIBILITY comment: "a call that ignores method visibility" comment: Flags for call nodes. - name: EncodingFlags values: - name: FORCED_UTF8_ENCODING comment: "internal bytes forced the encoding to UTF-8" - name: FORCED_BINARY_ENCODING comment: "internal bytes forced the encoding to binary" comment: Flags for nodes that have unescaped content. - name: IntegerBaseFlags values: - name: BINARY comment: "0b prefix" - name: DECIMAL comment: "0d or no prefix" - name: OCTAL comment: "0o or 0 prefix" - name: HEXADECIMAL comment: "0x prefix" comment: Flags for integer nodes that correspond to the base of the integer. - name: InterpolatedStringNodeFlags values: - name: FROZEN comment: "frozen by virtue of a `frozen_string_literal: true` comment or `--enable-frozen-string-literal`; only for adjacent string literals like `'a' 'b'`" - name: MUTABLE comment: "mutable by virtue of a `frozen_string_literal: false` comment or `--disable-frozen-string-literal`; only for adjacent string literals like `'a' 'b'`" comment: Flags for interpolated string nodes that indicated mutability if they are also marked as literals. - name: KeywordHashNodeFlags values: - name: SYMBOL_KEYS comment: "a keyword hash which only has `AssocNode` elements all with symbol keys, which means the elements can be treated as keyword arguments" comment: Flags for keyword hash nodes. - name: LoopFlags values: - name: BEGIN_MODIFIER comment: "a loop after a begin statement, so the body is executed first before the condition" comment: Flags for while and until loop nodes. - name: ParameterFlags values: - name: REPEATED_PARAMETER comment: "a parameter name that has been repeated in the method signature" comment: Flags for parameter nodes. - name: RangeFlags values: - name: EXCLUDE_END comment: "... operator" comment: Flags for range and flip-flop nodes. - name: RegularExpressionFlags values: - name: IGNORE_CASE comment: "i - ignores the case of characters when matching" - name: EXTENDED comment: "x - ignores whitespace and allows comments in regular expressions" - name: MULTI_LINE comment: "m - allows $ to match the end of lines within strings" - name: ONCE comment: "o - only interpolates values into the regular expression once" - name: EUC_JP comment: "e - forces the EUC-JP encoding" - name: ASCII_8BIT comment: "n - forces the ASCII-8BIT encoding" - name: WINDOWS_31J comment: "s - forces the Windows-31J encoding" - name: UTF_8 comment: "u - forces the UTF-8 encoding" - name: FORCED_UTF8_ENCODING comment: "internal bytes forced the encoding to UTF-8" - name: FORCED_BINARY_ENCODING comment: "internal bytes forced the encoding to binary" - name: FORCED_US_ASCII_ENCODING comment: "internal bytes forced the encoding to US-ASCII" comment: Flags for regular expression and match last line nodes. - name: ShareableConstantNodeFlags values: - name: LITERAL comment: "constant writes that should be modified with shareable constant value literal" - name: EXPERIMENTAL_EVERYTHING comment: "constant writes that should be modified with shareable constant value experimental everything" - name: EXPERIMENTAL_COPY comment: "constant writes that should be modified with shareable constant value experimental copy" comment: Flags for shareable constant nodes. - name: StringFlags values: - name: FORCED_UTF8_ENCODING comment: "internal bytes forced the encoding to UTF-8" - name: FORCED_BINARY_ENCODING comment: "internal bytes forced the encoding to binary" - name: FROZEN comment: "frozen by virtue of a `frozen_string_literal: true` comment or `--enable-frozen-string-literal`" - name: MUTABLE comment: "mutable by virtue of a `frozen_string_literal: false` comment or `--disable-frozen-string-literal`" comment: Flags for string nodes. - name: SymbolFlags values: - name: FORCED_UTF8_ENCODING comment: "internal bytes forced the encoding to UTF-8" - name: FORCED_BINARY_ENCODING comment: "internal bytes forced the encoding to binary" - name: FORCED_US_ASCII_ENCODING comment: "internal bytes forced the encoding to US-ASCII" comment: Flags for symbol nodes. nodes: - name: AliasGlobalVariableNode fields: - name: new_name type: node kind: - GlobalVariableReadNode - BackReferenceReadNode - NumberedReferenceReadNode comment: | Represents the new name of the global variable that can be used after aliasing. alias $foo $bar ^^^^ - name: old_name type: node kind: - GlobalVariableReadNode - BackReferenceReadNode - NumberedReferenceReadNode - on error: SymbolNode # alias $a b - on error: MissingNode # alias $a 42 comment: | Represents the old name of the global variable that can be used before aliasing. alias $foo $bar ^^^^ - name: keyword_loc type: location comment: | The location of the `alias` keyword. alias $foo $bar ^^^^^ comment: | Represents the use of the `alias` keyword to alias a global variable. alias $foo $bar ^^^^^^^^^^^^^^^ - name: AliasMethodNode fields: - name: new_name type: node kind: - SymbolNode - InterpolatedSymbolNode comment: | Represents the new name of the method that will be aliased. alias foo bar ^^^ alias :foo :bar ^^^^ alias :"#{foo}" :"#{bar}" ^^^^^^^^^ - name: old_name type: node kind: - SymbolNode - InterpolatedSymbolNode - on error: GlobalVariableReadNode # alias a $b - on error: MissingNode # alias a 42 comment: | Represents the old name of the method that will be aliased. alias foo bar ^^^ alias :foo :bar ^^^^ alias :"#{foo}" :"#{bar}" ^^^^^^^^^ - name: keyword_loc type: location comment: | Represents the use of the `alias` keyword to alias a method. alias foo bar ^^^^^^^^^^^^^ - name: AlternationPatternNode fields: - name: left type: node kind: pattern expression comment: | Represents the left side of the expression. foo => bar | baz ^^^ - name: right type: node kind: pattern expression comment: | Represents the right side of the expression. foo => bar | baz ^^^ - name: operator_loc type: location comment: | Represents the alternation operator location. foo => bar | baz ^ comment: | Represents an alternation pattern in pattern matching. foo => bar | baz ^^^^^^^^^ - name: AndNode fields: - name: left type: node kind: non-void expression comment: | Represents the left side of the expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). left and right ^^^^ 1 && 2 ^ - name: right type: node kind: Node comment: | Represents the right side of the expression. left && right ^^^^^ 1 and 2 ^ - name: operator_loc type: location comment: | The location of the `and` keyword or the `&&` operator. left and right ^^^ comment: | Represents the use of the `&&` operator or the `and` keyword. left and right ^^^^^^^^^^^^^^ - name: ArgumentsNode flags: ArgumentsNodeFlags fields: - name: arguments type: node[] kind: non-void expression comment: | Represents a set of arguments to a method or a keyword. return foo, bar, baz ^^^^^^^^^^^^^ - name: ArrayNode flags: ArrayNodeFlags fields: - name: elements type: node[] kind: non-void expression comment: Represent the list of zero or more [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression) within the array. - name: opening_loc type: location? comment: | Represents the optional source location for the opening token. [1,2,3] # "[" %w[foo bar baz] # "%w[" %I(apple orange banana) # "%I(" foo = 1, 2, 3 # nil - name: closing_loc type: location? comment: | Represents the optional source location for the closing token. [1,2,3] # "]" %w[foo bar baz] # "]" %I(apple orange banana) # ")" foo = 1, 2, 3 # nil comment: | Represents an array literal. This can be a regular array using brackets or a special array using % like %w or %i. [1, 2, 3] ^^^^^^^^^ - name: ArrayPatternNode fields: - name: constant type: node? kind: - ConstantReadNode - ConstantPathNode - name: requireds type: node[] kind: pattern expression - name: rest type: node? kind: pattern expression - name: posts type: node[] kind: pattern expression - name: opening_loc type: location? - name: closing_loc type: location? comment: | Represents an array pattern in pattern matching. foo in 1, 2 ^^^^^^^^^^^ foo in [1, 2] ^^^^^^^^^^^^^ foo in *1 ^^^^^^^^^ foo in Bar[] ^^^^^^^^^^^^ foo in Bar[1, 2, 3] ^^^^^^^^^^^^^^^^^^^ - name: AssocNode fields: - name: key type: node kind: non-void expression comment: | The key of the association. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). { a: b } ^ { foo => bar } ^^^ { def a; end => 1 } ^^^^^^^^^^ - name: value type: node kind: non-void expression comment: | The value of the association, if present. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). { foo => bar } ^^^ { x: 1 } ^ - name: operator_loc type: location? comment: | The location of the `=>` operator, if present. { foo => bar } ^^ comment: | Represents a hash key/value pair. { a => b } ^^^^^^ - name: AssocSplatNode fields: - name: value type: node? kind: non-void expression comment: | The value to be splatted, if present. Will be missing when keyword rest argument forwarding is used. { **foo } ^^^ - name: operator_loc type: location comment: | The location of the `**` operator. { **x } ^^ comment: | Represents a splat in a hash literal. { **foo } ^^^^^ - name: BackReferenceReadNode fields: - name: name type: constant comment: | The name of the back-reference variable, including the leading `$`. $& # name `:$&` $+ # name `:$+` comment: | Represents reading a reference to a field in the previous match. $' ^^ - name: BeginNode fields: - name: begin_keyword_loc type: location? - name: statements type: node? kind: StatementsNode - name: rescue_clause type: node? kind: RescueNode - name: else_clause type: node? kind: ElseNode - name: ensure_clause type: node? kind: EnsureNode - name: end_keyword_loc type: location? newline: false comment: | Represents a begin statement. begin foo end ^^^^^ - name: BlockArgumentNode fields: - name: expression type: node? kind: non-void expression - name: operator_loc type: location comment: | Represents a block argument using `&`. bar(&args) ^^^^^^^^^^ - name: BlockLocalVariableNode flags: ParameterFlags fields: - name: name type: constant comment: | Represents a block local variable. a { |; b| } ^ - name: BlockNode fields: - name: locals type: constant[] - name: parameters type: node? kind: - BlockParametersNode - NumberedParametersNode - ItParametersNode - name: body type: node? kind: - StatementsNode - BeginNode - name: opening_loc type: location - name: closing_loc type: location comment: | Represents a block of ruby code. [1, 2, 3].each { |i| puts x } ^^^^^^^^^^^^^^ - name: BlockParameterNode flags: ParameterFlags fields: - name: name type: constant? - name: name_loc type: location? - name: operator_loc type: location comment: | Represents a block parameter of a method, block, or lambda definition. def a(&b) ^^ end - name: BlockParametersNode fields: - name: parameters type: node? kind: ParametersNode - name: locals type: node[] kind: BlockLocalVariableNode - name: opening_loc type: location? - name: closing_loc type: location? comment: | Represents a block's parameters declaration. -> (a, b = 1; local) { } ^^^^^^^^^^^^^^^^^ foo do |a, b = 1; local| ^^^^^^^^^^^^^^^^^ end - name: BreakNode fields: - name: arguments type: node? kind: ArgumentsNode comment: | The arguments to the break statement, if present. These can be any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). break foo ^^^ - name: keyword_loc type: location comment: | The location of the `break` keyword. break foo ^^^^^ comment: | Represents the use of the `break` keyword. break foo ^^^^^^^^^ - name: CallAndWriteNode flags: CallNodeFlags fields: - name: receiver type: node? kind: non-void expression - name: call_operator_loc type: location? - name: message_loc type: location? - name: read_name type: constant - name: write_name type: constant - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `&&=` operator on a call. foo.bar &&= value ^^^^^^^^^^^^^^^^^ - name: CallNode flags: CallNodeFlags fields: - name: receiver type: node? kind: non-void expression comment: | The object that the method is being called on. This can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). foo.bar ^^^ +foo ^^^ foo + bar ^^^ - name: call_operator_loc type: location? - name: name type: constant - name: message_loc type: location? - name: opening_loc type: location? - name: arguments type: node? kind: ArgumentsNode - name: closing_loc type: location? - name: block type: node? kind: - BlockNode - BlockArgumentNode comment: | Represents a method call, in all of the various forms that can take. foo ^^^ foo() ^^^^^ +foo ^^^^ foo + bar ^^^^^^^^^ foo.bar ^^^^^^^ foo&.bar ^^^^^^^^ - name: CallOperatorWriteNode flags: CallNodeFlags fields: - name: receiver type: node? kind: non-void expression - name: call_operator_loc type: location? - name: message_loc type: location? - name: read_name type: constant - name: write_name type: constant - name: binary_operator type: constant - name: binary_operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of an assignment operator on a call. foo.bar += baz ^^^^^^^^^^^^^^ - name: CallOrWriteNode flags: CallNodeFlags fields: - name: receiver type: node? kind: non-void expression - name: call_operator_loc type: location? - name: message_loc type: location? - name: read_name type: constant - name: write_name type: constant - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `||=` operator on a call. foo.bar ||= value ^^^^^^^^^^^^^^^^^ - name: CallTargetNode flags: CallNodeFlags fields: - name: receiver type: node kind: non-void expression - name: call_operator_loc type: location - name: name type: constant - name: message_loc type: location comment: | Represents assigning to a method call. foo.bar, = 1 ^^^^^^^ begin rescue => foo.bar ^^^^^^^ end for foo.bar in baz do end ^^^^^^^ - name: CapturePatternNode fields: - name: value type: node kind: pattern expression - name: target type: node kind: LocalVariableTargetNode - name: operator_loc type: location comment: | Represents assigning to a local variable in pattern matching. foo => [bar => baz] ^^^^^^^^^^^^ - name: CaseMatchNode fields: - name: predicate type: node? kind: non-void expression - name: conditions type: node[] kind: InNode - name: else_clause type: node? kind: ElseNode - name: case_keyword_loc type: location - name: end_keyword_loc type: location comment: | Represents the use of a case statement for pattern matching. case true in false end ^^^^^^^^^ - name: CaseNode fields: - name: predicate type: node? kind: non-void expression - name: conditions type: node[] kind: WhenNode - name: else_clause type: node? kind: ElseNode - name: case_keyword_loc type: location - name: end_keyword_loc type: location comment: | Represents the use of a case statement. case true when false end ^^^^^^^^^^ - name: ClassNode fields: - name: locals type: constant[] - name: class_keyword_loc type: location - name: constant_path type: node kind: - ConstantReadNode - ConstantPathNode - on error: CallNode # class 0.X end - name: inheritance_operator_loc type: location? - name: superclass type: node? kind: non-void expression - name: body type: node? kind: - StatementsNode - BeginNode - name: end_keyword_loc type: location - name: name type: constant comment: | Represents a class declaration involving the `class` keyword. class Foo end ^^^^^^^^^^^^^ - name: ClassVariableAndWriteNode fields: - name: name type: constant - name: name_loc type: location - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `&&=` operator for assignment to a class variable. @@target &&= value ^^^^^^^^^^^^^^^^^^ - name: ClassVariableOperatorWriteNode fields: - name: name type: constant - name: name_loc type: location - name: binary_operator_loc type: location - name: value type: node kind: non-void expression - name: binary_operator type: constant comment: | Represents assigning to a class variable using an operator that isn't `=`. @@target += value ^^^^^^^^^^^^^^^^^ - name: ClassVariableOrWriteNode fields: - name: name type: constant - name: name_loc type: location - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `||=` operator for assignment to a class variable. @@target ||= value ^^^^^^^^^^^^^^^^^^ - name: ClassVariableReadNode fields: - name: name type: constant comment: | The name of the class variable, which is a `@@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers). @@abc # name `:@@abc` @@_test # name `:@@_test` comment: | Represents referencing a class variable. @@foo ^^^^^ - name: ClassVariableTargetNode fields: - name: name type: constant comment: | Represents writing to a class variable in a context that doesn't have an explicit value. @@foo, @@bar = baz ^^^^^ ^^^^^ - name: ClassVariableWriteNode fields: - name: name type: constant comment: | The name of the class variable, which is a `@@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers). @@abc = 123 # name `@@abc` @@_test = :test # name `@@_test` - name: name_loc type: location comment: | The location of the variable name. @@foo = :bar ^^^^^ - name: value type: node kind: non-void expression comment: | The value to write to the class variable. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@foo = :bar ^^^^ @@_xyz = 123 ^^^ - name: operator_loc type: location comment: | The location of the `=` operator. @@foo = :bar ^ comment: | Represents writing to a class variable. @@foo = 1 ^^^^^^^^^ - name: ConstantAndWriteNode fields: - name: name type: constant - name: name_loc type: location - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `&&=` operator for assignment to a constant. Target &&= value ^^^^^^^^^^^^^^^^ - name: ConstantOperatorWriteNode fields: - name: name type: constant - name: name_loc type: location - name: binary_operator_loc type: location - name: value type: node kind: non-void expression - name: binary_operator type: constant comment: | Represents assigning to a constant using an operator that isn't `=`. Target += value ^^^^^^^^^^^^^^^ - name: ConstantOrWriteNode fields: - name: name type: constant - name: name_loc type: location - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `||=` operator for assignment to a constant. Target ||= value ^^^^^^^^^^^^^^^^ - name: ConstantPathAndWriteNode fields: - name: target type: node kind: ConstantPathNode - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `&&=` operator for assignment to a constant path. Parent::Child &&= value ^^^^^^^^^^^^^^^^^^^^^^^ - name: ConstantPathNode fields: - name: parent type: node? kind: non-void expression comment: | The left-hand node of the path, if present. It can be `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). It will be `nil` when the constant lookup is at the root of the module tree. Foo::Bar ^^^ self::Test ^^^^ a.b::C ^^^ - name: name type: constant? comment: The name of the constant being accessed. This could be `nil` in the event of a syntax error. - name: delimiter_loc type: location comment: | The location of the `::` delimiter. ::Foo ^^ One::Two ^^ - name: name_loc type: location comment: | The location of the name of the constant. ::Foo ^^^ One::Two ^^^ comment: | Represents accessing a constant through a path of `::` operators. Foo::Bar ^^^^^^^^ - name: ConstantPathOperatorWriteNode fields: - name: target type: node kind: ConstantPathNode - name: binary_operator_loc type: location - name: value type: node kind: non-void expression - name: binary_operator type: constant comment: | Represents assigning to a constant path using an operator that isn't `=`. Parent::Child += value ^^^^^^^^^^^^^^^^^^^^^^ - name: ConstantPathOrWriteNode fields: - name: target type: node kind: ConstantPathNode - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `||=` operator for assignment to a constant path. Parent::Child ||= value ^^^^^^^^^^^^^^^^^^^^^^^ - name: ConstantPathTargetNode fields: - name: parent type: node? kind: non-void expression - name: name type: constant? - name: delimiter_loc type: location - name: name_loc type: location comment: | Represents writing to a constant path in a context that doesn't have an explicit value. Foo::Foo, Bar::Bar = baz ^^^^^^^^ ^^^^^^^^ - name: ConstantPathWriteNode fields: - name: target type: node kind: ConstantPathNode comment: | A node representing the constant path being written to. Foo::Bar = 1 ^^^^^^^^ ::Foo = :abc ^^^^^ - name: operator_loc type: location comment: | The location of the `=` operator. ::ABC = 123 ^ - name: value type: node kind: non-void expression comment: | The value to write to the constant path. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). FOO::BAR = :abc ^^^^ comment: | Represents writing to a constant path. ::Foo = 1 ^^^^^^^^^ Foo::Bar = 1 ^^^^^^^^^^^^ ::Foo::Bar = 1 ^^^^^^^^^^^^^^ - name: ConstantReadNode fields: - name: name type: constant comment: | The name of the [constant](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#constants). X # name `:X` SOME_CONSTANT # name `:SOME_CONSTANT` comment: | Represents referencing a constant. Foo ^^^ - name: ConstantTargetNode fields: - name: name type: constant comment: | Represents writing to a constant in a context that doesn't have an explicit value. Foo, Bar = baz ^^^ ^^^ - name: ConstantWriteNode fields: - name: name type: constant comment: | The name of the [constant](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#constants). Foo = :bar # name `:Foo` XYZ = 1 # name `:XYZ` - name: name_loc type: location comment: | The location of the constant name. FOO = 1 ^^^ - name: value type: node kind: non-void expression comment: | The value to write to the constant. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). FOO = :bar ^^^^ MyClass = Class.new ^^^^^^^^^ - name: operator_loc type: location comment: | The location of the `=` operator. FOO = :bar ^ comment: | Represents writing to a constant. Foo = 1 ^^^^^^^ - name: DefNode fields: - name: name type: constant - name: name_loc type: location - name: receiver type: node? kind: non-void expression - name: parameters type: node? kind: ParametersNode - name: body type: node? kind: - StatementsNode - BeginNode - name: locals type: constant[] - name: def_keyword_loc type: location - name: operator_loc type: location? - name: lparen_loc type: location? - name: rparen_loc type: location? - name: equal_loc type: location? - name: end_keyword_loc type: location? comment: | Represents a method definition. def method end ^^^^^^^^^^ - name: DefinedNode fields: - name: lparen_loc type: location? - name: value type: node kind: Node # More than non-void expression as defined?(return) is allowed, yet defined?(BEGIN{}) is SyntaxError - name: rparen_loc type: location? - name: keyword_loc type: location comment: | Represents the use of the `defined?` keyword. defined?(a) ^^^^^^^^^^^ - name: ElseNode fields: - name: else_keyword_loc type: location - name: statements type: node? kind: StatementsNode - name: end_keyword_loc type: location? comment: | Represents an `else` clause in a `case`, `if`, or `unless` statement. if a then b else c end ^^^^^^^^^^ - name: EmbeddedStatementsNode fields: - name: opening_loc type: location - name: statements type: node? kind: StatementsNode - name: closing_loc type: location comment: | Represents an interpolated set of statements. "foo #{bar}" ^^^^^^ - name: EmbeddedVariableNode fields: - name: operator_loc type: location - name: variable type: node kind: - InstanceVariableReadNode - ClassVariableReadNode - GlobalVariableReadNode - BackReferenceReadNode - NumberedReferenceReadNode comment: | Represents an interpolated variable. "foo #@bar" ^^^^^ - name: EnsureNode fields: - name: ensure_keyword_loc type: location - name: statements type: node? kind: StatementsNode - name: end_keyword_loc type: location comment: | Represents an `ensure` clause in a `begin` statement. begin foo ensure ^^^^^^ bar end - name: FalseNode comment: | Represents the use of the literal `false` keyword. false ^^^^^ - name: FindPatternNode fields: - name: constant type: node? kind: - ConstantReadNode - ConstantPathNode - name: left type: node kind: SplatNode - name: requireds type: node[] kind: pattern expression - name: right type: node kind: - SplatNode - on error: MissingNode - name: opening_loc type: location? - name: closing_loc type: location? comment: | Represents a find pattern in pattern matching. foo in *bar, baz, *qux ^^^^^^^^^^^^^^^ foo in [*bar, baz, *qux] ^^^^^^^^^^^^^^^^^ foo in Foo(*bar, baz, *qux) ^^^^^^^^^^^^^^^^^^^^ - name: FlipFlopNode flags: RangeFlags fields: - name: left type: node? kind: non-void expression - name: right type: node? kind: non-void expression - name: operator_loc type: location comment: | Represents the use of the `..` or `...` operators to create flip flops. baz if foo .. bar ^^^^^^^^^^ - name: FloatNode fields: - name: value type: double comment: The value of the floating point number as a Float. comment: | Represents a floating point number literal. 1.0 ^^^ - name: ForNode fields: - name: index type: node kind: - LocalVariableTargetNode - InstanceVariableTargetNode - ClassVariableTargetNode - GlobalVariableTargetNode - ConstantTargetNode - ConstantPathTargetNode - CallTargetNode - IndexTargetNode - MultiTargetNode - on error: BackReferenceReadNode # for $& in a end - on error: NumberedReferenceReadNode # for $1 in a end - on error: MissingNode # for in 1..10; end comment: | The index expression for `for` loops. for i in a end ^ - name: collection type: node kind: non-void expression comment: | The collection to iterate over. for i in a end ^ - name: statements type: node? kind: StatementsNode comment: | Represents the body of statements to execute for each iteration of the loop. for i in a foo(i) ^^^^^^ end - name: for_keyword_loc type: location comment: | The location of the `for` keyword. for i in a end ^^^ - name: in_keyword_loc type: location comment: | The location of the `in` keyword. for i in a end ^^ - name: do_keyword_loc type: location? comment: | The location of the `do` keyword, if present. for i in a do end ^^ - name: end_keyword_loc type: location comment: | The location of the `end` keyword. for i in a end ^^^ comment: | Represents the use of the `for` keyword. for i in a end ^^^^^^^^^^^^^^ - name: ForwardingArgumentsNode comment: | Represents forwarding all arguments to this method to another method. def foo(...) bar(...) ^^^ end - name: ForwardingParameterNode comment: | Represents the use of the forwarding parameter in a method, block, or lambda declaration. def foo(...) ^^^ end - name: ForwardingSuperNode fields: - name: block type: node? kind: BlockNode comment: | Represents the use of the `super` keyword without parentheses or arguments. super ^^^^^ - name: GlobalVariableAndWriteNode fields: - name: name type: constant - name: name_loc type: location - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `&&=` operator for assignment to a global variable. $target &&= value ^^^^^^^^^^^^^^^^^ - name: GlobalVariableOperatorWriteNode fields: - name: name type: constant - name: name_loc type: location - name: binary_operator_loc type: location - name: value type: node kind: non-void expression - name: binary_operator type: constant comment: | Represents assigning to a global variable using an operator that isn't `=`. $target += value ^^^^^^^^^^^^^^^^ - name: GlobalVariableOrWriteNode fields: - name: name type: constant - name: name_loc type: location - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `||=` operator for assignment to a global variable. $target ||= value ^^^^^^^^^^^^^^^^^ - name: GlobalVariableReadNode fields: - name: name type: constant comment: | The name of the global variable, which is a `$` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifier). Alternatively, it can be one of the special global variables designated by a symbol. $foo # name `:$foo` $_Test # name `:$_Test` comment: | Represents referencing a global variable. $foo ^^^^ - name: GlobalVariableTargetNode fields: - name: name type: constant comment: | Represents writing to a global variable in a context that doesn't have an explicit value. $foo, $bar = baz ^^^^ ^^^^ - name: GlobalVariableWriteNode fields: - name: name type: constant comment: | The name of the global variable, which is a `$` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifier). Alternatively, it can be one of the special global variables designated by a symbol. $foo = :bar # name `:$foo` $_Test = 123 # name `:$_Test` - name: name_loc type: location comment: | The location of the global variable's name. $foo = :bar ^^^^ - name: value type: node kind: non-void expression comment: | The value to write to the global variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). $foo = :bar ^^^^ $-xyz = 123 ^^^ - name: operator_loc type: location comment: | The location of the `=` operator. $foo = :bar ^ comment: | Represents writing to a global variable. $foo = 1 ^^^^^^^^ - name: HashNode fields: - name: opening_loc type: location comment: | The location of the opening brace. { a => b } ^ - name: elements type: node[] kind: - AssocNode - AssocSplatNode comment: | The elements of the hash. These can be either `AssocNode`s or `AssocSplatNode`s. { a: b } ^^^^ { **foo } ^^^^^ - name: closing_loc type: location comment: | The location of the closing brace. { a => b } ^ comment: | Represents a hash literal. { a => b } ^^^^^^^^^^ - name: HashPatternNode fields: - name: constant type: node? kind: - ConstantReadNode - ConstantPathNode - name: elements type: node[] kind: AssocNode - name: rest type: node? kind: - AssocSplatNode - NoKeywordsParameterNode - name: opening_loc type: location? - name: closing_loc type: location? comment: | Represents a hash pattern in pattern matching. foo => { a: 1, b: 2 } ^^^^^^^^^^^^^^ foo => { a: 1, b: 2, **c } ^^^^^^^^^^^^^^^^^^^ - name: IfNode fields: - name: if_keyword_loc type: location? comment: | The location of the `if` keyword if present. bar if foo ^^ The `if_keyword_loc` field will be `nil` when the `IfNode` represents a ternary expression. - name: predicate type: node kind: non-void expression comment: | The node for the condition the `IfNode` is testing. if foo ^^^ bar end bar if foo ^^^ foo ? bar : baz ^^^ - name: then_keyword_loc type: location? comment: | The location of the `then` keyword (if present) or the `?` in a ternary expression, `nil` otherwise. if foo then bar end ^^^^ a ? b : c ^ - name: statements type: node? kind: StatementsNode comment: | Represents the body of statements that will be executed when the predicate is evaluated as truthy. Will be `nil` when no body is provided. if foo bar ^^^ baz ^^^ end - name: subsequent type: node? kind: - ElseNode - IfNode comment: | Represents an `ElseNode` or an `IfNode` when there is an `else` or an `elsif` in the `if` statement. if foo bar elsif baz ^^^^^^^^^ qux ^^^ end ^^^ if foo then bar else baz end ^^^^^^^^^^^^ - name: end_keyword_loc type: location? comment: | The location of the `end` keyword if present, `nil` otherwise. if foo bar end ^^^ newline: predicate comment: | Represents the use of the `if` keyword, either in the block form or the modifier form, or a ternary expression. bar if foo ^^^^^^^^^^ if foo then bar end ^^^^^^^^^^^^^^^^^^^ foo ? bar : baz ^^^^^^^^^^^^^^^ - name: ImaginaryNode fields: - name: numeric type: node kind: - FloatNode - IntegerNode - RationalNode comment: | Represents an imaginary number literal. 1.0i ^^^^ - name: ImplicitNode fields: - name: value type: node kind: - LocalVariableReadNode - CallNode - ConstantReadNode - LocalVariableTargetNode comment: | Represents a node that is implicitly being added to the tree but doesn't correspond directly to a node in the source. { foo: } ^^^^ { Foo: } ^^^^ foo in { bar: } ^^^^ - name: ImplicitRestNode comment: | Represents using a trailing comma to indicate an implicit rest parameter. foo { |bar,| } ^ foo in [bar,] ^ for foo, in bar do end ^ foo, = bar ^ - name: InNode fields: - name: pattern type: node kind: pattern expression - name: statements type: node? kind: StatementsNode - name: in_loc type: location - name: then_loc type: location? comment: | Represents the use of the `in` keyword in a case statement. case a; in b then c end ^^^^^^^^^^^ - name: IndexAndWriteNode flags: CallNodeFlags fields: - name: receiver type: node? kind: non-void expression - name: call_operator_loc type: location? - name: opening_loc type: location - name: arguments type: node? kind: ArgumentsNode - name: closing_loc type: location - name: block type: node? kind: BlockArgumentNode # foo[&b] &&= value, only valid on Ruby < 3.4 - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `&&=` operator on a call to the `[]` method. foo.bar[baz] &&= value ^^^^^^^^^^^^^^^^^^^^^^ - name: IndexOperatorWriteNode flags: CallNodeFlags fields: - name: receiver type: node? kind: non-void expression - name: call_operator_loc type: location? - name: opening_loc type: location - name: arguments type: node? kind: ArgumentsNode - name: closing_loc type: location - name: block type: node? kind: BlockArgumentNode # foo[&b] += value, only valid on Ruby < 3.4 - name: binary_operator type: constant - name: binary_operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of an assignment operator on a call to `[]`. foo.bar[baz] += value ^^^^^^^^^^^^^^^^^^^^^ - name: IndexOrWriteNode flags: CallNodeFlags fields: - name: receiver type: node? kind: non-void expression - name: call_operator_loc type: location? - name: opening_loc type: location - name: arguments type: node? kind: ArgumentsNode - name: closing_loc type: location - name: block type: node? kind: BlockArgumentNode # foo[&b] ||= value, only valid on Ruby < 3.4 - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `||=` operator on a call to `[]`. foo.bar[baz] ||= value ^^^^^^^^^^^^^^^^^^^^^^ - name: IndexTargetNode flags: CallNodeFlags fields: - name: receiver type: node kind: non-void expression - name: opening_loc type: location - name: arguments type: node? kind: ArgumentsNode - name: closing_loc type: location - name: block type: node? kind: BlockArgumentNode # foo[&b], = 1, only valid on Ruby < 3.4 comment: | Represents assigning to an index. foo[bar], = 1 ^^^^^^^^ begin rescue => foo[bar] ^^^^^^^^ end for foo[bar] in baz do end ^^^^^^^^ - name: InstanceVariableAndWriteNode fields: - name: name type: constant - name: name_loc type: location - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `&&=` operator for assignment to an instance variable. @target &&= value ^^^^^^^^^^^^^^^^^ - name: InstanceVariableOperatorWriteNode fields: - name: name type: constant - name: name_loc type: location - name: binary_operator_loc type: location - name: value type: node kind: non-void expression - name: binary_operator type: constant comment: | Represents assigning to an instance variable using an operator that isn't `=`. @target += value ^^^^^^^^^^^^^^^^ - name: InstanceVariableOrWriteNode fields: - name: name type: constant - name: name_loc type: location - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents the use of the `||=` operator for assignment to an instance variable. @target ||= value ^^^^^^^^^^^^^^^^^ - name: InstanceVariableReadNode fields: - name: name type: constant comment: | The name of the instance variable, which is a `@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers). @x # name `:@x` @_test # name `:@_test` comment: | Represents referencing an instance variable. @foo ^^^^ - name: InstanceVariableTargetNode fields: - name: name type: constant comment: | Represents writing to an instance variable in a context that doesn't have an explicit value. @foo, @bar = baz ^^^^ ^^^^ - name: InstanceVariableWriteNode fields: - name: name type: constant comment: | The name of the instance variable, which is a `@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers). @x = :y # name `:@x` @_foo = "bar" # name `@_foo` - name: name_loc type: location comment: | The location of the variable name. @_x = 1 ^^^ - name: value type: node kind: non-void expression comment: | The value to write to the instance variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @foo = :bar ^^^^ @_x = 1234 ^^^^ - name: operator_loc type: location comment: | The location of the `=` operator. @x = y ^ comment: | Represents writing to an instance variable. @foo = 1 ^^^^^^^^ - name: IntegerNode flags: IntegerBaseFlags fields: - name: value type: integer comment: The value of the integer literal as a number. comment: | Represents an integer number literal. 1 ^ - name: InterpolatedMatchLastLineNode flags: RegularExpressionFlags fields: - name: opening_loc type: location - name: parts type: node[] kind: - StringNode - EmbeddedStatementsNode - EmbeddedVariableNode - name: closing_loc type: location newline: parts comment: | Represents a regular expression literal that contains interpolation that is being used in the predicate of a conditional to implicitly match against the last line read by an IO object. if /foo #{bar} baz/ then end ^^^^^^^^^^^^^^^^ - name: InterpolatedRegularExpressionNode flags: RegularExpressionFlags fields: - name: opening_loc type: location - name: parts type: node[] kind: - StringNode - EmbeddedStatementsNode - EmbeddedVariableNode - name: closing_loc type: location newline: parts comment: | Represents a regular expression literal that contains interpolation. /foo #{bar} baz/ ^^^^^^^^^^^^^^^^ - name: InterpolatedStringNode flags: InterpolatedStringNodeFlags fields: - name: opening_loc type: location? - name: parts type: node[] kind: - StringNode - EmbeddedStatementsNode - EmbeddedVariableNode - InterpolatedStringNode # `"a" "#{b}"` - name: closing_loc type: location? newline: parts comment: | Represents a string literal that contains interpolation. "foo #{bar} baz" ^^^^^^^^^^^^^^^^ - name: InterpolatedSymbolNode fields: - name: opening_loc type: location? - name: parts type: node[] kind: - StringNode - EmbeddedStatementsNode - EmbeddedVariableNode - name: closing_loc type: location? newline: parts comment: | Represents a symbol literal that contains interpolation. :"foo #{bar} baz" ^^^^^^^^^^^^^^^^^ - name: InterpolatedXStringNode fields: - name: opening_loc type: location - name: parts type: node[] kind: - StringNode - EmbeddedStatementsNode - EmbeddedVariableNode - name: closing_loc type: location newline: parts comment: | Represents an xstring literal that contains interpolation. `foo #{bar} baz` ^^^^^^^^^^^^^^^^ - name: ItLocalVariableReadNode comment: | Represents reading from the implicit `it` local variable. -> { it } ^^ - name: ItParametersNode comment: | Represents an implicit set of parameters through the use of the `it` keyword within a block or lambda. -> { it + it } ^^^^^^^^^^^^^^ - name: KeywordHashNode flags: KeywordHashNodeFlags fields: - name: elements type: node[] kind: - AssocNode - AssocSplatNode comment: | Represents a hash literal without opening and closing braces. foo(a: b) ^^^^ - name: KeywordRestParameterNode flags: ParameterFlags fields: - name: name type: constant? - name: name_loc type: location? - name: operator_loc type: location comment: | Represents a keyword rest parameter to a method, block, or lambda definition. def a(**b) ^^^ end - name: LambdaNode fields: - name: locals type: constant[] - name: operator_loc type: location - name: opening_loc type: location - name: closing_loc type: location - name: parameters type: node? kind: - BlockParametersNode - NumberedParametersNode - ItParametersNode - name: body type: node? kind: - StatementsNode - BeginNode comment: | Represents using a lambda literal (not the lambda method call). ->(value) { value * 2 } ^^^^^^^^^^^^^^^^^^^^^^^ - name: LocalVariableAndWriteNode fields: - name: name_loc type: location - name: operator_loc type: location - name: value type: node kind: non-void expression - name: name type: constant - name: depth type: uint32 comment: | Represents the use of the `&&=` operator for assignment to a local variable. target &&= value ^^^^^^^^^^^^^^^^ - name: LocalVariableOperatorWriteNode fields: - name: name_loc type: location - name: binary_operator_loc type: location - name: value type: node kind: non-void expression - name: name type: constant - name: binary_operator type: constant - name: depth type: uint32 comment: | Represents assigning to a local variable using an operator that isn't `=`. target += value ^^^^^^^^^^^^^^^ - name: LocalVariableOrWriteNode fields: - name: name_loc type: location - name: operator_loc type: location - name: value type: node kind: non-void expression - name: name type: constant - name: depth type: uint32 comment: | Represents the use of the `||=` operator for assignment to a local variable. target ||= value ^^^^^^^^^^^^^^^^ - name: LocalVariableReadNode fields: - name: name type: constant comment: | The name of the local variable, which is an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers). x # name `:x` _Test # name `:_Test` Note that this can also be an underscore followed by a number for the default block parameters. _1 # name `:_1` - name: depth type: uint32 comment: | The number of visible scopes that should be searched to find the origin of this local variable. foo = 1; foo # depth 0 bar = 2; tap { bar } # depth 1 The specific rules for calculating the depth may differ from individual Ruby implementations, as they are not specified by the language. For more information, see [the Prism documentation](https://github.com/ruby/prism/blob/main/docs/local_variable_depth.md). comment: | Represents reading a local variable. Note that this requires that a local variable of the same name has already been written to in the same scope, otherwise it is parsed as a method call. foo ^^^ - name: LocalVariableTargetNode fields: - name: name type: constant - name: depth type: uint32 comment: | Represents writing to a local variable in a context that doesn't have an explicit value. foo, bar = baz ^^^ ^^^ - name: LocalVariableWriteNode fields: - name: name type: constant comment: | The name of the local variable, which is an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers). foo = :bar # name `:foo` abc = 123 # name `:abc` - name: depth type: uint32 comment: | The number of semantic scopes we have to traverse to find the declaration of this variable. foo = 1 # depth 0 tap { foo = 1 } # depth 1 The specific rules for calculating the depth may differ from individual Ruby implementations, as they are not specified by the language. For more information, see [the Prism documentation](https://github.com/ruby/prism/blob/main/docs/local_variable_depth.md). - name: name_loc type: location comment: | The location of the variable name. foo = :bar ^^^ - name: value type: node kind: non-void expression comment: | The value to write to the local variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). foo = :bar ^^^^ abc = 1234 ^^^^ Note that since the name of a local variable is known before the value is parsed, it is valid for a local variable to appear within the value of its own write. foo = foo - name: operator_loc type: location comment: | The location of the `=` operator. x = :y ^ comment: | Represents writing to a local variable. foo = 1 ^^^^^^^ - name: MatchLastLineNode flags: RegularExpressionFlags fields: - name: opening_loc type: location - name: content_loc type: location - name: closing_loc type: location - name: unescaped type: string comment: | Represents a regular expression literal used in the predicate of a conditional to implicitly match against the last line read by an IO object. if /foo/i then end ^^^^^^ - name: MatchPredicateNode fields: - name: value type: node kind: non-void expression - name: pattern type: node kind: pattern expression - name: operator_loc type: location comment: | Represents the use of the modifier `in` operator. foo in bar ^^^^^^^^^^ - name: MatchRequiredNode fields: - name: value type: node kind: non-void expression - name: pattern type: node kind: pattern expression - name: operator_loc type: location comment: | Represents the use of the `=>` operator. foo => bar ^^^^^^^^^^ - name: MatchWriteNode fields: - name: call type: node kind: CallNode - name: targets type: node[] kind: LocalVariableTargetNode comment: | Represents writing local variables using a regular expression match with named capture groups. /(?bar)/ =~ baz ^^^^^^^^^^^^^^^^^^^^ - name: MissingNode comment: | Represents a node that is missing from the source and results in a syntax error. - name: ModuleNode fields: - name: locals type: constant[] - name: module_keyword_loc type: location - name: constant_path type: node kind: - ConstantReadNode - ConstantPathNode - on error: MissingNode # module Parent module end - name: body type: node? kind: - StatementsNode - BeginNode - name: end_keyword_loc type: location - name: name type: constant comment: | Represents a module declaration involving the `module` keyword. module Foo end ^^^^^^^^^^^^^^ - name: MultiTargetNode fields: - name: lefts type: node[] kind: - LocalVariableTargetNode - InstanceVariableTargetNode - ClassVariableTargetNode - GlobalVariableTargetNode - ConstantTargetNode - ConstantPathTargetNode - CallTargetNode - IndexTargetNode - MultiTargetNode - RequiredParameterNode # def m((a,b)); end - on error: BackReferenceReadNode # a, (b, $&) = z - on error: NumberedReferenceReadNode # a, (b, $1) = z comment: | Represents the targets expressions before a splat node. a, (b, c, *) = 1, 2, 3, 4, 5 ^^^^ The splat node can be absent, in that case all target expressions are in the left field. a, (b, c) = 1, 2, 3, 4, 5 ^^^^ - name: rest type: node? kind: - ImplicitRestNode - SplatNode comment: | Represents a splat node in the target expression. a, (b, *c) = 1, 2, 3, 4 ^^ The variable can be empty, this results in a `SplatNode` with a `nil` expression field. a, (b, *) = 1, 2, 3, 4 ^ If the `*` is omitted, this field will contain an `ImplicitRestNode` a, (b,) = 1, 2, 3, 4 ^ - name: rights type: node[] kind: - LocalVariableTargetNode - InstanceVariableTargetNode - ClassVariableTargetNode - GlobalVariableTargetNode - ConstantTargetNode - ConstantPathTargetNode - CallTargetNode - IndexTargetNode - MultiTargetNode - RequiredParameterNode # def m((*,b)); end - on error: BackReferenceReadNode # a, (*, $&) = z - on error: NumberedReferenceReadNode # a, (*, $1) = z comment: | Represents the targets expressions after a splat node. a, (*, b, c) = 1, 2, 3, 4, 5 ^^^^ - name: lparen_loc type: location? comment: | The location of the opening parenthesis. a, (b, c) = 1, 2, 3 ^ - name: rparen_loc type: location? comment: | The location of the closing parenthesis. a, (b, c) = 1, 2, 3 ^ comment: | Represents a multi-target expression. a, (b, c) = 1, 2, 3 ^^^^^^ This can be a part of `MultiWriteNode` as above, or the target of a `for` loop for a, b in [[1, 2], [3, 4]] ^^^^ - name: MultiWriteNode fields: - name: lefts type: node[] kind: - LocalVariableTargetNode - InstanceVariableTargetNode - ClassVariableTargetNode - GlobalVariableTargetNode - ConstantTargetNode - ConstantPathTargetNode - CallTargetNode - IndexTargetNode - MultiTargetNode - on error: BackReferenceReadNode # $&, = z - on error: NumberedReferenceReadNode # $1, = z comment: | Represents the targets expressions before a splat node. a, b, * = 1, 2, 3, 4, 5 ^^^^ The splat node can be absent, in that case all target expressions are in the left field. a, b, c = 1, 2, 3, 4, 5 ^^^^^^^ - name: rest type: node? kind: - ImplicitRestNode - SplatNode comment: | Represents a splat node in the target expression. a, b, *c = 1, 2, 3, 4 ^^ The variable can be empty, this results in a `SplatNode` with a `nil` expression field. a, b, * = 1, 2, 3, 4 ^ If the `*` is omitted, this field will contain an `ImplicitRestNode` a, b, = 1, 2, 3, 4 ^ - name: rights type: node[] kind: - LocalVariableTargetNode - InstanceVariableTargetNode - ClassVariableTargetNode - GlobalVariableTargetNode - ConstantTargetNode - ConstantPathTargetNode - CallTargetNode - IndexTargetNode - MultiTargetNode - on error: BackReferenceReadNode # *, $& = z - on error: NumberedReferenceReadNode # *, $1 = z comment: | Represents the targets expressions after a splat node. a, *, b, c = 1, 2, 3, 4, 5 ^^^^ - name: lparen_loc type: location? comment: | The location of the opening parenthesis. (a, b, c) = 1, 2, 3 ^ - name: rparen_loc type: location? comment: | The location of the closing parenthesis. (a, b, c) = 1, 2, 3 ^ - name: operator_loc type: location comment: | The location of the operator. a, b, c = 1, 2, 3 ^ - name: value type: node kind: non-void expression comment: | The value to write to the targets. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). a, b, c = 1, 2, 3 ^^^^^^^ comment: | Represents a write to a multi-target expression. a, b, c = 1, 2, 3 ^^^^^^^^^^^^^^^^^ - name: NextNode fields: - name: arguments type: node? kind: ArgumentsNode - name: keyword_loc type: location comment: | Represents the use of the `next` keyword. next 1 ^^^^^^ - name: NilNode comment: | Represents the use of the `nil` keyword. nil ^^^ - name: NoKeywordsParameterNode fields: - name: operator_loc type: location - name: keyword_loc type: location comment: | Represents the use of `**nil` inside method arguments. def a(**nil) ^^^^^ end - name: NumberedParametersNode fields: - name: maximum type: uint8 comment: | Represents an implicit set of parameters through the use of numbered parameters within a block or lambda. -> { _1 + _2 } ^^^^^^^^^^^^^^ - name: NumberedReferenceReadNode fields: - name: number type: uint32 comment: | The (1-indexed, from the left) number of the capture group. Numbered references that are too large result in this value being `0`. $1 # number `1` $5432 # number `5432` $4294967296 # number `0` comment: | Represents reading a numbered reference to a capture in the previous match. $1 ^^ - name: OptionalKeywordParameterNode flags: ParameterFlags fields: - name: name type: constant - name: name_loc type: location - name: value type: node kind: non-void expression comment: | Represents an optional keyword parameter to a method, block, or lambda definition. def a(b: 1) ^^^^ end - name: OptionalParameterNode flags: ParameterFlags fields: - name: name type: constant - name: name_loc type: location - name: operator_loc type: location - name: value type: node kind: non-void expression comment: | Represents an optional parameter to a method, block, or lambda definition. def a(b = 1) ^^^^^ end - name: OrNode fields: - name: left type: node kind: non-void expression comment: | Represents the left side of the expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). left or right ^^^^ 1 || 2 ^ - name: right type: node kind: Node comment: | Represents the right side of the expression. left || right ^^^^^ 1 or 2 ^ - name: operator_loc type: location comment: | The location of the `or` keyword or the `||` operator. left or right ^^ comment: | Represents the use of the `||` operator or the `or` keyword. left or right ^^^^^^^^^^^^^ - name: ParametersNode fields: - name: requireds type: node[] kind: - RequiredParameterNode - MultiTargetNode - name: optionals type: node[] kind: OptionalParameterNode - name: rest type: node? kind: - RestParameterNode - ImplicitRestNode # Only in block parameters - name: posts type: node[] kind: - RequiredParameterNode - MultiTargetNode # On parsing error of `f(**kwargs, ...)` or `f(**nil, ...)`, the keyword_rest value is moved here: - on error: KeywordRestParameterNode - on error: NoKeywordsParameterNode # On parsing error of `f(..., ...)`, the first forwarding parameter is moved here: - on error: ForwardingParameterNode - name: keywords type: node[] kind: - RequiredKeywordParameterNode - OptionalKeywordParameterNode - name: keyword_rest type: node? kind: - KeywordRestParameterNode - ForwardingParameterNode - NoKeywordsParameterNode - name: block type: node? kind: BlockParameterNode comment: | Represents the list of parameters on a method, block, or lambda definition. def a(b, c, d) ^^^^^^^ end - name: ParenthesesNode fields: - name: body type: node? kind: non-void expression # Usually a StatementsNode but not always e.g. `1 in (..10)` - name: opening_loc type: location - name: closing_loc type: location newline: false comment: | Represents a parenthesized expression (10 + 34) ^^^^^^^^^ - name: PinnedExpressionNode fields: - name: expression type: node kind: non-void expression - name: operator_loc type: location - name: lparen_loc type: location - name: rparen_loc type: location comment: | Represents the use of the `^` operator for pinning an expression in a pattern matching expression. foo in ^(bar) ^^^^^^ - name: PinnedVariableNode fields: - name: variable type: node kind: - LocalVariableReadNode - InstanceVariableReadNode - ClassVariableReadNode - GlobalVariableReadNode # foo in ^$a - BackReferenceReadNode # foo in ^$& - NumberedReferenceReadNode # foo in ^$1 - ItLocalVariableReadNode # proc { 1 in ^it } - on error: MissingNode # foo in ^Bar - name: operator_loc type: location comment: | Represents the use of the `^` operator for pinning a variable in a pattern matching expression. foo in ^bar ^^^^ - name: PostExecutionNode fields: - name: statements type: node? kind: StatementsNode - name: keyword_loc type: location - name: opening_loc type: location - name: closing_loc type: location comment: | Represents the use of the `END` keyword. END { foo } ^^^^^^^^^^^ - name: PreExecutionNode fields: - name: statements type: node? kind: StatementsNode - name: keyword_loc type: location - name: opening_loc type: location - name: closing_loc type: location comment: | Represents the use of the `BEGIN` keyword. BEGIN { foo } ^^^^^^^^^^^^^ - name: ProgramNode fields: - name: locals type: constant[] - name: statements type: node kind: StatementsNode comment: The top level node of any parse tree. - name: RangeNode flags: RangeFlags fields: - name: left type: node? kind: non-void expression comment: | The left-hand side of the range, if present. It can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). 1... ^ hello...goodbye ^^^^^ - name: right type: node? kind: non-void expression comment: | The right-hand side of the range, if present. It can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). ..5 ^ 1...foo ^^^ If neither right-hand or left-hand side was included, this will be a MissingNode. - name: operator_loc type: location comment: | The location of the `..` or `...` operator. comment: | Represents the use of the `..` or `...` operators. 1..2 ^^^^ c if a =~ /left/ ... b =~ /right/ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - name: RationalNode flags: IntegerBaseFlags fields: - name: numerator type: integer comment: | The numerator of the rational number. 1.5r # numerator 3 - name: denominator type: integer comment: | The denominator of the rational number. 1.5r # denominator 2 comment: | Represents a rational number literal. 1.0r ^^^^ - name: RedoNode comment: | Represents the use of the `redo` keyword. redo ^^^^ - name: RegularExpressionNode flags: RegularExpressionFlags fields: - name: opening_loc type: location - name: content_loc type: location - name: closing_loc type: location - name: unescaped type: string comment: | Represents a regular expression literal with no interpolation. /foo/i ^^^^^^ - name: RequiredKeywordParameterNode flags: ParameterFlags fields: - name: name type: constant - name: name_loc type: location comment: | Represents a required keyword parameter to a method, block, or lambda definition. def a(b: ) ^^ end - name: RequiredParameterNode flags: ParameterFlags fields: - name: name type: constant comment: | Represents a required parameter to a method, block, or lambda definition. def a(b) ^ end - name: RescueModifierNode fields: - name: expression type: node kind: Node - name: keyword_loc type: location - name: rescue_expression type: node kind: Node newline: expression comment: | Represents an expression modified with a rescue. foo rescue nil ^^^^^^^^^^^^^^ - name: RescueNode fields: - name: keyword_loc type: location - name: exceptions type: node[] kind: non-void expression - name: operator_loc type: location? - name: reference type: node? kind: - LocalVariableTargetNode - InstanceVariableTargetNode - ClassVariableTargetNode - GlobalVariableTargetNode - ConstantTargetNode - ConstantPathTargetNode - CallTargetNode - IndexTargetNode - on error: BackReferenceReadNode # => begin; rescue => $&; end - on error: NumberedReferenceReadNode # => begin; rescue => $1; end - on error: MissingNode # begin; rescue =>; end - name: statements type: node? kind: StatementsNode - name: subsequent type: node? kind: RescueNode comment: | Represents a rescue statement. begin rescue Foo, *splat, Bar => ex foo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ end `Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `reference` field. - name: RestParameterNode flags: ParameterFlags fields: - name: name type: constant? - name: name_loc type: location? - name: operator_loc type: location comment: | Represents a rest parameter to a method, block, or lambda definition. def a(*b) ^^ end - name: RetryNode comment: | Represents the use of the `retry` keyword. retry ^^^^^ - name: ReturnNode fields: - name: keyword_loc type: location - name: arguments type: node? kind: ArgumentsNode comment: | Represents the use of the `return` keyword. return 1 ^^^^^^^^ - name: SelfNode comment: | Represents the `self` keyword. self ^^^^ - name: ShareableConstantNode flags: ShareableConstantNodeFlags fields: - name: write type: node kind: - ConstantWriteNode - ConstantAndWriteNode - ConstantOrWriteNode - ConstantOperatorWriteNode - ConstantPathWriteNode - ConstantPathAndWriteNode - ConstantPathOrWriteNode - ConstantPathOperatorWriteNode comment: The constant write that should be modified with the shareability state. comment: | This node wraps a constant write to indicate that when the value is written, it should have its shareability state modified. # shareable_constant_value: literal C = { a: 1 } ^^^^^^^^^^^^ - name: SingletonClassNode fields: - name: locals type: constant[] - name: class_keyword_loc type: location - name: operator_loc type: location - name: expression type: node kind: non-void expression - name: body type: node? kind: - StatementsNode - BeginNode - name: end_keyword_loc type: location comment: | Represents a singleton class declaration involving the `class` keyword. class << self end ^^^^^^^^^^^^^^^^^ - name: SourceEncodingNode comment: | Represents the use of the `__ENCODING__` keyword. __ENCODING__ ^^^^^^^^^^^^ - name: SourceFileNode flags: StringFlags fields: - name: filepath type: string comment: Represents the file path being parsed. This corresponds directly to the `filepath` option given to the various `Prism::parse*` APIs. comment: | Represents the use of the `__FILE__` keyword. __FILE__ ^^^^^^^^ - name: SourceLineNode comment: | Represents the use of the `__LINE__` keyword. __LINE__ ^^^^^^^^ - name: SplatNode fields: - name: operator_loc type: location - name: expression type: node? kind: non-void expression comment: | Represents the use of the splat operator. [*a] ^^ - name: StatementsNode fields: - name: body type: node[] kind: Node comment: | Represents a set of statements contained within some scope. foo; bar; baz ^^^^^^^^^^^^^ - name: StringNode flags: StringFlags fields: - name: opening_loc type: location? - name: content_loc type: location - name: closing_loc type: location? - name: unescaped type: string comment: | Represents a string literal, a string contained within a `%w` list, or plain string content within an interpolated string. "foo" ^^^^^ %w[foo] ^^^ "foo #{bar} baz" ^^^^ ^^^^ - name: SuperNode fields: - name: keyword_loc type: location - name: lparen_loc type: location? - name: arguments type: node? kind: ArgumentsNode - name: rparen_loc type: location? - name: block type: node? kind: - BlockNode - BlockArgumentNode comment: | Represents the use of the `super` keyword with parentheses or arguments. super() ^^^^^^^ super foo, bar ^^^^^^^^^^^^^^ - name: SymbolNode flags: SymbolFlags fields: - name: opening_loc type: location? - name: value_loc type: location? - name: closing_loc type: location? - name: unescaped type: string comment: | Represents a symbol literal or a symbol contained within a `%i` list. :foo ^^^^ %i[foo] ^^^ - name: TrueNode comment: | Represents the use of the literal `true` keyword. true ^^^^ - name: UndefNode fields: - name: names type: node[] kind: - SymbolNode - InterpolatedSymbolNode - name: keyword_loc type: location comment: | Represents the use of the `undef` keyword. undef :foo, :bar, :baz ^^^^^^^^^^^^^^^^^^^^^^ - name: UnlessNode fields: - name: keyword_loc type: location comment: | The location of the `unless` keyword. unless cond then bar end ^^^^^^ bar unless cond ^^^^^^ - name: predicate type: node kind: non-void expression comment: | The condition to be evaluated for the unless expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). unless cond then bar end ^^^^ bar unless cond ^^^^ - name: then_keyword_loc type: location? comment: | The location of the `then` keyword, if present. unless cond then bar end ^^^^ - name: statements type: node? kind: StatementsNode comment: | The body of statements that will executed if the unless condition is falsey. Will be `nil` if no body is provided. unless cond then bar end ^^^ - name: else_clause type: node? kind: ElseNode comment: | The else clause of the unless expression, if present. unless cond then bar else baz end ^^^^^^^^ - name: end_keyword_loc type: location? comment: | The location of the `end` keyword, if present. unless cond then bar end ^^^ newline: predicate comment: | Represents the use of the `unless` keyword, either in the block form or the modifier form. bar unless foo ^^^^^^^^^^^^^^ unless foo then bar end ^^^^^^^^^^^^^^^^^^^^^^^ - name: UntilNode flags: LoopFlags fields: - name: keyword_loc type: location - name: closing_loc type: location? - name: predicate type: node kind: non-void expression - name: statements type: node? kind: StatementsNode newline: predicate comment: | Represents the use of the `until` keyword, either in the block form or the modifier form. bar until foo ^^^^^^^^^^^^^ until foo do bar end ^^^^^^^^^^^^^^^^^^^^ - name: WhenNode fields: - name: keyword_loc type: location - name: conditions type: node[] kind: non-void expression - name: then_keyword_loc type: location? - name: statements type: node? kind: StatementsNode comment: | Represents the use of the `when` keyword within a case statement. case true when true ^^^^^^^^^ end - name: WhileNode flags: LoopFlags fields: - name: keyword_loc type: location - name: closing_loc type: location? - name: predicate type: node kind: non-void expression - name: statements type: node? kind: StatementsNode newline: predicate comment: | Represents the use of the `while` keyword, either in the block form or the modifier form. bar while foo ^^^^^^^^^^^^^ while foo do bar end ^^^^^^^^^^^^^^^^^^^^ - name: XStringNode flags: EncodingFlags fields: - name: opening_loc type: location - name: content_loc type: location - name: closing_loc type: location - name: unescaped type: string comment: | Represents an xstring literal with no interpolation. `foo` ^^^^^ - name: YieldNode fields: - name: keyword_loc type: location - name: lparen_loc type: location? - name: arguments type: node? kind: ArgumentsNode - name: rparen_loc type: location? comment: | Represents the use of the `yield` keyword. yield 1 ^^^^^^^