summaryrefslogtreecommitdiff
path: root/prism/config.yml
diff options
context:
space:
mode:
Diffstat (limited to 'prism/config.yml')
-rw-r--r--prism/config.yml4740
1 files changed, 4740 insertions, 0 deletions
diff --git a/prism/config.yml b/prism/config.yml
new file mode 100644
index 0000000000..bbbc5f3d33
--- /dev/null
+++ b/prism/config.yml
@@ -0,0 +1,4740 @@
+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_ELLIPSES_LAMBDA
+ - ARGUMENT_NO_FORWARDING_ELLIPSES_BLOCK
+ - 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_PARAMETERS
+ - DEF_ENDLESS_SETTER
+ - DEF_ENDLESS_DO_BLOCK
+ - 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_AFTER_NOT_LPAREN
+ - EXPECT_LPAREN_AFTER_NOT_OTHER
+ - 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_CAPTURE_IN_ALTERNATIVE
+ - 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_ESCAPED_NON_ASCII_IN_UTF8
+ - REGEXP_INCOMPAT_CHAR_ENCODING
+ - REGEXP_INVALID_CHAR_PROPERTY
+ - 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_PARAMETER_DEFAULT_VALUE
+ - 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:
+ # The order of the tokens at the beginning is important, because we use them
+ # for a lookup table.
+ - name: EOF
+ value: 1
+ comment: final token in the file
+ - name: BRACE_RIGHT
+ comment: "}"
+ - name: COMMA
+ comment: ","
+ - name: EMBEXPR_END
+ comment: "}"
+ - name: KEYWORD_DO
+ comment: "do"
+ - name: KEYWORD_ELSE
+ comment: "else"
+ - name: KEYWORD_ELSIF
+ comment: "elsif"
+ - name: KEYWORD_END
+ comment: "end"
+ - name: KEYWORD_ENSURE
+ comment: "ensure"
+ - name: KEYWORD_IN
+ comment: "in"
+ - name: KEYWORD_RESCUE
+ comment: "rescue"
+ - name: KEYWORD_THEN
+ comment: "then"
+ - name: KEYWORD_WHEN
+ comment: "when"
+ - name: NEWLINE
+ comment: "a newline character outside of other tokens"
+ - name: PARENTHESIS_RIGHT
+ comment: ")"
+ - name: PIPE
+ comment: "|"
+ - name: SEMICOLON
+ comment: ";"
+ # Tokens from here on are not used for lookup, and can be in any order.
+ - 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: 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: 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: 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_BLOCK
+ comment: "do keyword for a block attached to a command"
+ - name: KEYWORD_DO_LOOP
+ comment: "do keyword for a predicate in a while, until, or for loop"
+ - name: KEYWORD_END_UPCASE
+ comment: "END"
+ - 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_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_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_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_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: 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: 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_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: 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: ParenthesesNodeFlags
+ values:
+ - name: MULTIPLE_STATEMENTS
+ comment: "parentheses that contain multiple potentially void statements"
+ comment: Flags for parentheses 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
+ 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
+ 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 Location of the `alias` keyword.
+
+ alias foo bar
+ ^^^^^
+ 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: |
+ The list of arguments, if present. These can be any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
+
+ foo(bar, baz)
+ ^^^^^^^^
+ 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:
+ - ConstantPathNode
+ - ConstantReadNode
+ comment: |
+ Represents the optional constant preceding the Array
+
+ foo in Bar[]
+ ^^^
+
+ foo in Bar[1, 2, 3]
+ ^^^
+
+ foo in Bar::Baz[1, 2, 3]
+ ^^^^^^^^
+ - name: requireds
+ type: node[]
+ kind: pattern expression
+ comment: |
+ Represents the required elements of the array pattern.
+
+ foo in [1, 2]
+ ^ ^
+ - name: rest
+ type: node?
+ kind:
+ - ImplicitRestNode
+ - SplatNode
+ comment: |
+ Represents the rest element of the array pattern.
+
+ foo in *bar
+ ^^^^
+ - name: posts
+ type: node[]
+ kind: pattern expression
+ comment: |
+ Represents the elements after the rest element of the array pattern.
+
+ foo in *bar, baz
+ ^^^
+ - name: opening_loc
+ type: location?
+ comment: |
+ Represents the opening Location of the array pattern.
+
+ foo in [1, 2]
+ ^
+ - name: closing_loc
+ type: location?
+ comment: |
+ Represents the closing Location of the array pattern.
+
+ foo in [1, 2]
+ ^
+ comment: |
+ Represents an array pattern in pattern matching.
+
+ foo in 1, 2
+ ^^^^
+
+ foo in [1, 2]
+ ^^^^^^
+
+ foo in *bar
+ ^^^^
+
+ 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?
+ comment: |
+ Represents the Location of the `begin` keyword.
+
+ begin x end
+ ^^^^^
+ - name: statements
+ type: node?
+ kind: StatementsNode
+ comment: |
+ Represents the statements within the begin block.
+
+ begin x end
+ ^
+ - name: rescue_clause
+ type: node?
+ kind: RescueNode
+ comment: |
+ Represents the rescue clause within the begin block.
+
+ begin x; rescue y; end
+ ^^^^^^^^
+ - name: else_clause
+ type: node?
+ kind: ElseNode
+ comment: |
+ Represents the else clause within the begin block.
+
+ begin x; rescue y; else z; end
+ ^^^^^^^^^^^
+ - name: ensure_clause
+ type: node?
+ kind: EnsureNode
+ comment: |
+ Represents the ensure clause within the begin block.
+
+ begin x; ensure y; end
+ ^^^^^^^^
+ - name: end_keyword_loc
+ type: location?
+ comment: |
+ Represents the Location of the `end` keyword.
+
+ begin x end
+ ^^^
+ newline: false
+ comment: |
+ Represents a begin statement.
+
+ begin
+ foo
+ end
+ ^^^^^
+ - name: BlockArgumentNode
+ fields:
+ - name: expression
+ type: node?
+ kind: non-void expression
+ comment: |
+ The expression that is being passed as a block argument. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
+
+ foo(&args)
+ ^^^^
+ - name: operator_loc
+ type: location
+ comment: |
+ Represents the Location of the `&` operator.
+
+ foo(&args)
+ ^
+ comment: |
+ Represents a block argument using `&`.
+
+ bar(&args)
+ ^^^^^
+ - name: BlockLocalVariableNode
+ flags: ParameterFlags
+ fields:
+ - name: name
+ type: constant
+ comment: |
+ The name of the block local variable.
+
+ a { |; b| } # name `:b`
+ ^
+ comment: |
+ Represents a block local variable.
+
+ a { |; b| }
+ ^
+ - name: BlockNode
+ fields:
+ - name: locals
+ type: constant[]
+ comment: |
+ The local variables declared in the block.
+
+ [1, 2, 3].each { |i| puts x } # locals: [:i]
+ ^
+ - name: parameters
+ type: node?
+ kind:
+ - BlockParametersNode
+ - NumberedParametersNode
+ - ItParametersNode
+ comment: |
+ The parameters of the block.
+
+ [1, 2, 3].each { |i| puts x }
+ ^^^
+ [1, 2, 3].each { puts _1 }
+ ^^^^^^^^^^^
+ [1, 2, 3].each { puts it }
+ ^^^^^^^^^^^
+ - name: body
+ type: node?
+ kind:
+ - StatementsNode
+ - BeginNode
+ comment: |
+ The body of the block.
+
+ [1, 2, 3].each { |i| puts x }
+ ^^^^^^
+ - name: opening_loc
+ type: location
+ comment: |
+ Represents the Location of the opening `{` or `do`.
+
+ [1, 2, 3].each { |i| puts x }
+ ^
+ - name: closing_loc
+ type: location
+ comment: |
+ Represents the Location of the closing `}` or `end`.
+
+ [1, 2, 3].each { |i| puts x }
+ ^
+ comment: |
+ Represents a block of ruby code.
+
+ [1, 2, 3].each { |i| puts x }
+ ^^^^^^^^^^^^^^
+ - name: BlockParameterNode
+ flags: ParameterFlags
+ fields:
+ - name: name
+ type: constant?
+ comment: |
+ The name of the block parameter.
+
+ def a(&b) # name `:b`
+ ^
+ end
+ - name: name_loc
+ type: location?
+ comment: |
+ Represents the Location of the block parameter name.
+
+ def a(&b)
+ ^
+ - name: operator_loc
+ type: location
+ comment: |
+ Represents the Location of the `&` operator.
+
+ def a(&b)
+ ^
+ end
+ 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
+ comment: |
+ Represents the parameters of the block.
+
+ -> (a, b = 1; local) { }
+ ^^^^^^^^
+
+ foo do |a, b = 1; local|
+ ^^^^^^^^
+ end
+ - name: locals
+ type: node[]
+ kind: BlockLocalVariableNode
+ comment: |
+ Represents the local variables of the block.
+
+ -> (a, b = 1; local) { }
+ ^^^^^
+
+ foo do |a, b = 1; local|
+ ^^^^^
+ end
+ - name: opening_loc
+ type: location?
+ comment: |
+ Represents the opening Location of the block parameters.
+
+ -> (a, b = 1; local) { }
+ ^
+
+ foo do |a, b = 1; local|
+ ^
+ end
+ - name: closing_loc
+ type: location?
+ comment: |
+ Represents the closing Location of the block parameters.
+
+ -> (a, b = 1; local) { }
+ ^
+
+ foo do |a, b = 1; local|
+ ^
+ end
+ 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
+ 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 &&= value
+ ^^^
+ - name: call_operator_loc
+ type: location?
+ comment: |
+ Represents the Location of the call operator.
+
+ foo.bar &&= value
+ ^
+ - name: message_loc
+ type: location?
+ comment: |
+ Represents the Location of the message.
+
+ foo.bar &&= value
+ ^^^
+ - name: read_name
+ type: constant
+ comment: |
+ Represents the name of the method being called.
+
+ foo.bar &&= value # read_name `:bar`
+ ^^^
+ - name: write_name
+ type: constant
+ comment: |
+ Represents the name of the method being written to.
+
+ foo.bar &&= value # write_name `:bar=`
+ ^^^
+ - name: operator_loc
+ type: location
+ comment: |
+ Represents the Location of the operator.
+
+ foo.bar &&= value
+ ^^^
+ - name: value
+ type: node
+ kind: non-void expression
+ comment: |
+ Represents the value being assigned.
+
+ foo.bar &&= value
+ ^^^^^
+ 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?
+ comment: |
+ Represents the Location of the call operator.
+
+ foo.bar
+ ^
+
+ foo&.bar
+ ^^
+ - name: name
+ type: constant
+ comment: |
+ Represents the name of the method being called.
+
+ foo.bar # name `:foo`
+ ^^^
+ - name: message_loc
+ type: location?
+ comment: |
+ Represents the Location of the message.
+
+ foo.bar
+ ^^^
+ - name: opening_loc
+ type: location?
+ comment: |
+ Represents the Location of the left parenthesis.
+
+ foo(bar)
+ ^
+ - name: arguments
+ type: node?
+ kind: ArgumentsNode
+ comment: |
+ Represents the arguments to the method call. These can be any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
+
+ foo(bar)
+ ^^^
+ - name: closing_loc
+ type: location?
+ comment: |
+ Represents the Location of the right parenthesis.
+
+ foo(bar)
+ ^
+ - name: equal_loc
+ type: location?
+ comment: |
+ Represents the Location of the equal sign, in the case that this is an attribute write.
+
+ foo.bar = value
+ ^
+
+ foo[bar] = value
+ ^
+ - name: block
+ type: node?
+ kind:
+ - BlockNode
+ - BlockArgumentNode
+ comment: |
+ Represents the block that is being passed to the method.
+
+ foo { |a| a }
+ ^^^^^^^^^
+ 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
+ comment: |
+ The object that the method is being called on. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
+
+ foo.bar += value
+ ^^^
+ - name: call_operator_loc
+ type: location?
+ comment: |
+ Represents the Location of the call operator.
+
+ foo.bar += value
+ ^
+ - name: message_loc
+ type: location?
+ comment: |
+ Represents the Location of the message.
+
+ foo.bar += value
+ ^^^
+ - name: read_name
+ type: constant
+ comment: |
+ Represents the name of the method being called.
+
+ foo.bar += value # read_name `:bar`
+ ^^^
+ - name: write_name
+ type: constant
+ comment: |
+ Represents the name of the method being written to.
+
+ foo.bar += value # write_name `:bar=`
+ ^^^
+ - name: binary_operator
+ type: constant
+ comment: |
+ Represents the binary operator being used.
+
+ foo.bar += value # binary_operator `:+`
+ ^
+ - name: binary_operator_loc
+ type: location
+ comment: |
+ Represents the Location of the binary operator.
+
+ foo.bar += value
+ ^^
+ - name: value
+ type: node
+ kind: non-void expression
+ comment: |
+ Represents the value being assigned.
+
+ foo.bar += value
+ ^^^^^
+ 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
+ comment: |
+ The object that the method is being called on. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
+
+ foo.bar ||= value
+ ^^^
+ - name: call_operator_loc
+ type: location?
+ comment: |
+ Represents the Location of the call operator.
+
+ foo.bar ||= value
+ ^
+ - name: message_loc
+ type: location?
+ comment: |
+ Represents the Location of the message.
+
+ foo.bar ||= value
+ ^^^
+ - name: read_name
+ type: constant
+ comment: |
+ Represents the name of the method being called.
+
+ foo.bar ||= value # read_name `:bar`
+ ^^^
+ - name: write_name
+ type: constant
+ comment: |
+ Represents the name of the method being written to.
+
+ foo.bar ||= value # write_name `:bar=`
+ ^^^
+ - name: operator_loc
+ type: location
+ comment: |
+ Represents the Location of the operator.
+
+ foo.bar ||= value
+ ^^^
+ - name: value
+ type: node
+ kind: non-void expression
+ comment: |
+ Represents the value being assigned.
+
+ foo.bar ||= value
+ ^^^^^
+ 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
+ comment: |
+ The object that the method is being called on. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
+
+ foo.bar = 1
+ ^^^
+ - name: call_operator_loc
+ type: location
+ comment: |
+ Represents the Location of the call operator.
+
+ foo.bar = 1
+ ^
+ - name: name
+ type: constant
+ comment: |
+ Represents the name of the method being called.
+
+ foo.bar = 1 # name `:foo`
+ ^^^
+ - name: message_loc
+ type: location
+ comment: |
+ Represents the Location of the message.
+
+ foo.bar = 1
+ ^^^
+ 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
+ comment: |
+ Represents the value to capture.
+
+ foo => bar
+ ^^^
+ - name: target
+ type: node
+ kind: LocalVariableTargetNode
+ comment: |
+ Represents the target of the capture.
+
+ foo => bar
+ ^^^
+ - name: operator_loc
+ type: location
+ comment: |
+ Represents the Location of the `=>` operator.
+
+ foo => bar
+ ^^
+ comment: |
+ Represents assigning to a local variable in pattern matching.
+
+ foo => [bar => baz]
+ ^^^^^^^^^^
+ - name: CaseMatchNode
+ fields:
+ - name: predicate
+ type: node?
+ kind: non-void expression
+ comment: |
+ Represents the predicate of the case match. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
+
+ case true; in false; end
+ ^^^^
+ - name: conditions
+ type: node[]
+ kind: InNode
+ comment: |
+ Represents the conditions of the case match.
+
+ case true; in false; end
+ ^^^^^^^^
+ - name: else_clause
+ type: node?
+ kind: ElseNode
+ comment: |
+ Represents the else clause of the case match.
+
+ case true; in false; else; end
+ ^^^^^^^^^
+ - name: case_keyword_loc
+ type: location
+ comment: |
+ Represents the Location of the `case` keyword.
+
+ case true; in false; end
+ ^^^^
+ - name: end_keyword_loc
+ type: location
+ comment: |
+ Represents the Location of the `end` keyword.
+
+ case true; in false; end
+ ^^^
+ 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
+ comment: |
+ Represents the predicate of the case statement. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
+
+ case true; when false; end
+ ^^^^
+ - name: conditions
+ type: node[]
+ kind: WhenNode
+ comment: |
+ Represents the conditions of the case statement.
+
+ case true; when false; end
+ ^^^^^^^^^^
+ - name: else_clause
+ type: node?
+ kind: ElseNode
+ comment: |
+ Represents the else clause of the case statement.
+
+ case true; when false; else; end
+ ^^^^^^^^^
+ - name: case_keyword_loc
+ type: location
+ comment: |
+ Represents the Location of the `case` keyword.
+
+ case true; when false; end
+ ^^^^
+ - name: end_keyword_loc
+ type: location
+ comment: |
+ Represents the Location of the `end` keyword.
+
+ case true; when false; end
+ ^^^
+ 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
+ comment: |
+ Represents the Location of the `class` keyword.
+
+ class Foo end
+ ^^^^^
+ - name: constant_path
+ type: node
+ kind:
+ - ConstantReadNode
+ - ConstantPathNode
+ - name: inheritance_operator_loc
+ type: location?
+ comment: |
+ Represents the Location of the `<` operator.
+
+ class Foo < Bar
+ ^
+ - name: superclass
+ type: node?
+ kind: non-void expression
+ comment: |
+ Represents the superclass of the class.
+
+ class Foo < Bar
+ ^^^
+ - name: body
+ type: node?
+ kind:
+ - StatementsNode
+ - BeginNode
+ comment: |
+ Represents the body of the class.
+
+ class Foo; bar; end
+ ^^^
+ - name: end_keyword_loc
+ type: location
+ comment: |
+ Represents the Location of the `end` keyword.
+
+ class Foo end
+ ^^^
+ - name: name
+ type: constant
+ comment: |
+ The name of the class.
+
+ class Foo end # name `:Foo`
+ comment: |
+ Represents a class declaration involving the `class` keyword.
+
+ class Foo end
+ ^^^^^^^^^^^^^
+ - name: ClassVariableAndWriteNode
+ 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).
+
+ @@target &&= value # name `:@@target`
+ ^^^^^^^^
+ - name: name_loc
+ type: location
+ comment: |
+ Represents the Location of the variable name.
+
+ @@target &&= value
+ ^^^^^^^^
+ - name: operator_loc
+ type: location
+ comment: |
+ Represents the Location of the `&&=` operator.
+
+ @@target &&= value
+ ^^^
+ - name: value
+ type: node
+ kind: non-void expression
+ comment: |
+ Represents the value being assigned. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
+
+ @@target &&= value
+ ^^^^^
+ 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: ErrorRecoveryNode
+ fields:
+ - name: unexpected
+ type: node?
+ kind: Node
+ comment: |
+ The unexpected node that was found in the tree, if there was one.
+ comment: |
+ Represents a node that is either missing or unexpected and results in a syntax error.
+ - name: FalseNode
+ comment: |
+ Represents the use of the literal `false` keyword.
+
+ false
+ ^^^^^
+ - name: FindPatternNode
+ fields:
+ - name: constant
+ type: node?
+ kind:
+ - ConstantPathNode
+ - ConstantReadNode
+ comment: |
+ Represents the optional constant preceding the pattern
+
+ foo in Foo(*bar, baz, *qux)
+ ^^^
+ - name: left
+ type: node
+ kind: SplatNode
+ comment: |
+ Represents the first wildcard node in the pattern.
+
+ foo in *bar, baz, *qux
+ ^^^^
+
+ foo in Foo(*bar, baz, *qux)
+ ^^^^
+ - name: requireds
+ type: node[]
+ kind: pattern expression
+ comment: |
+ Represents the nodes in between the wildcards.
+
+ foo in *bar, baz, *qux
+ ^^^
+
+ foo in Foo(*bar, baz, 1, *qux)
+ ^^^^^^
+ - name: right
+ type: node
+ kind: SplatNode
+ comment: |
+ Represents the second wildcard node in the pattern.
+
+ foo in *bar, baz, *qux
+ ^^^^
+
+ foo in Foo(*bar, baz, *qux)
+ ^^^^
+ - name: opening_loc
+ type: location?
+ comment: |
+ The Location of the opening brace.
+
+ foo in [*bar, baz, *qux]
+ ^
+
+ foo in Foo(*bar, baz, *qux)
+ ^
+ - name: closing_loc
+ type: location?
+ comment: |
+ The Location of the closing brace.
+
+ foo in [*bar, baz, *qux]
+ ^
+
+ foo in Foo(*bar, baz, *qux)
+ ^
+ comment: |
+ Represents a find pattern in pattern matching.
+
+ foo in *bar, baz, *qux
+ ^^^^^^^^^^^^^^^
+
+ foo in [*bar, baz, *qux]
+ ^^^^^^^^^^^^^^^^^
+
+ foo in Foo(*bar, baz, *qux)
+ ^^^^^^^^^^^^^^^^^^^^
+
+ 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
+ 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: keyword_loc
+ type: location
+ comment: |
+ super
+ ^^^^^
+
+ super { 123 }
+ ^^^^^
+ - name: block
+ type: node?
+ kind: BlockNode
+ comment: |
+ All other arguments are forwarded as normal, except the original block is replaced with the new block.
+ comment: |
+ Represents the use of the `super` keyword without parentheses or arguments, but which might have a block.
+
+ super
+ ^^^^^
+
+ super { 123 }
+ ^^^^^^^^^^^^^
+
+ If it has any other arguments, it would be a `SuperNode` instead.
+ - 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:
+ - ConstantPathNode
+ - ConstantReadNode
+ comment: |
+ Represents the optional constant preceding the Hash.
+
+ foo => Bar[a: 1, b: 2]
+ ^^^
+
+ foo => Bar::Baz[a: 1, b: 2]
+ ^^^^^^^^
+ - name: elements
+ type: node[]
+ kind: AssocNode
+ comment: |
+ Represents the explicit named hash keys and values.
+
+ foo => { a: 1, b:, ** }
+ ^^^^^^^^
+ - name: rest
+ type: node?
+ kind:
+ - AssocSplatNode
+ - NoKeywordsParameterNode
+ comment: |
+ Represents the rest of the Hash keys and values. This can be named, unnamed, or explicitly forbidden via `**nil`, this last one results in a `NoKeywordsParameterNode`.
+
+ foo => { a: 1, b:, **c }
+ ^^^
+
+ foo => { a: 1, b:, ** }
+ ^^
+
+ foo => { a: 1, b:, **nil }
+ ^^^^^
+ - name: opening_loc
+ type: location?
+ comment: |
+ The Location of the opening brace.
+
+ foo => { a: 1 }
+ ^
+
+ foo => Bar[a: 1]
+ ^
+ - name: closing_loc
+ type: location?
+ comment: |
+ The Location of the closing brace.
+
+ foo => { a: 1 }
+ ^
+
+ foo => Bar[a: 1]
+ ^
+ comment: |
+ Represents a hash pattern in pattern matching.
+
+ foo => { a: 1, b: 2 }
+ ^^^^^^^^^^^^^^
+
+ foo => { a: 1, b: 2, **c }
+ ^^^^^^^^^^^^^^^^^^^
+
+ foo => Bar[a: 1, b: 2]
+ ^^^^^^^^^^^^^^^
+
+ foo in { a: 1, b: 2 }
+ ^^^^^^^^^^^^^^
+ - 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
+ ^^^ ^^^
+
+ foo => 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
+ comment: |
+ Represents the left-hand side of the operator.
+
+ foo => bar
+ ^^^
+ - name: pattern
+ type: node
+ kind: pattern expression
+ comment: |
+ Represents the right-hand side of the operator. The type of the node depends on the expression.
+
+ Anything that looks like a local variable name (including `_`) will result in a `LocalVariableTargetNode`.
+
+ foo => a # This is equivalent to writing `a = foo`
+ ^
+
+ Using an explicit `Array` or combining expressions with `,` will result in a `ArrayPatternNode`. This can be preceded by a constant.
+
+ foo => [a]
+ ^^^
+
+ foo => a, b
+ ^^^^
+
+ foo => Bar[a, b]
+ ^^^^^^^^^
+
+ If the array pattern contains at least two wildcard matches, a `FindPatternNode` is created instead.
+
+ foo => *, 1, *a
+ ^^^^^
+
+ Using an explicit `Hash` or a constant with square brackets and hash keys in the square brackets will result in a `HashPatternNode`.
+
+ foo => { a: 1, b: }
+
+ foo => Bar[a: 1, b:]
+
+ foo => Bar[**]
+
+ To use any variable that needs run time evaluation, pinning is required. This results in a `PinnedVariableNode`
+
+ foo => ^a
+ ^^
+
+ Similar, any expression can be used with pinning. This results in a `PinnedExpressionNode`.
+
+ foo => ^(a + 1)
+
+ Anything else will result in the regular node for that expression, for example a `ConstantReadNode`.
+
+ foo => CONST
+ - name: operator_loc
+ type: location
+ comment: |
+ The Location of the operator.
+
+ foo => bar
+ ^^
+ 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.
+
+ /(?<foo>bar)/ =~ baz
+ ^^^^^^^^^^^^^^^^^^^^
+ - name: ModuleNode
+ fields:
+ - name: locals
+ type: constant[]
+ - name: module_keyword_loc
+ type: location
+ - name: constant_path
+ type: node
+ kind:
+ - ConstantReadNode
+ - ConstantPathNode
+ - 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
+ 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
+ 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
+ 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
+ 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: NoBlockParameterNode
+ 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: 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
+ - name: keywords
+ type: node[]
+ kind:
+ - RequiredKeywordParameterNode
+ - OptionalKeywordParameterNode
+ - name: keyword_rest
+ type: node?
+ kind:
+ - KeywordRestParameterNode
+ - ForwardingParameterNode
+ - NoKeywordsParameterNode
+ - name: block
+ type: node?
+ kind:
+ - BlockParameterNode
+ - NoBlockParameterNode
+ comment: |
+ Represents the list of parameters on a method, block, or lambda definition.
+
+ def a(b, c, d)
+ ^^^^^^^
+ end
+ - name: ParenthesesNode
+ flags: ParenthesesNodeFlags
+ 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
+ comment: |
+ The expression used in the pinned expression
+
+ foo in ^(bar)
+ ^^^
+ - name: operator_loc
+ type: location
+ comment: |
+ The Location of the `^` operator
+
+ foo in ^(bar)
+ ^
+ - name: lparen_loc
+ type: location
+ comment: |
+ The Location of the opening parenthesis.
+
+ foo in ^(bar)
+ ^
+ - name: rparen_loc
+ type: location
+ comment: |
+ The Location of the closing parenthesis.
+
+ foo in ^(bar)
+ ^
+ 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 }
+ comment: |
+ The variable used in the pinned expression
+
+ foo in ^bar
+ ^^^
+ - name: operator_loc
+ type: location
+ comment: |
+ The Location of the `^` operator
+
+ foo in ^bar
+ ^
+ 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 an ErrorRecoveryNode.
+ - 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
+ - name: then_keyword_loc
+ type: location?
+ - 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
+ comment: "Can be only `nil` when there are empty parentheses, like `super()`."
+ - 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
+ ^^^^^^^^^^^^^^
+
+ If no arguments are provided (except for a block), it would be a `ForwardingSuperNode` instead.
+ - 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: do_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: do_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
+ ^^^^^^^