prism 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -1
- data/Makefile +3 -2
- data/config.yml +278 -5
- data/ext/prism/api_node.c +70 -72
- data/ext/prism/extconf.rb +23 -4
- data/ext/prism/extension.c +11 -6
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +271 -4
- data/include/prism/diagnostic.h +3 -0
- data/include/prism/version.h +2 -2
- data/lib/prism/ffi.rb +1 -1
- data/lib/prism/lex_compat.rb +18 -1
- data/lib/prism/node.rb +1772 -265
- data/lib/prism/parse_result/newlines.rb +0 -2
- data/lib/prism/parse_result.rb +59 -13
- data/lib/prism/reflection.rb +18 -28
- data/lib/prism/serialize.rb +7 -4
- data/lib/prism/translation/parser/compiler.rb +32 -13
- data/lib/prism/translation/ripper.rb +59 -59
- data/lib/prism/translation/ruby_parser.rb +66 -28
- data/lib/prism.rb +1 -1
- data/prism.gemspec +1 -1
- data/rbi/prism/node.rbi +5 -2
- data/rbi/prism/parse_result.rbi +62 -34
- data/rbi/prism/reflection.rbi +7 -13
- data/rbi/prism.rbi +9 -9
- data/sig/prism/node.rbs +4 -1
- data/sig/prism/parse_result.rbs +30 -10
- data/sig/prism/reflection.rbs +2 -8
- data/sig/prism/serialize.rbs +2 -3
- data/sig/prism.rbs +9 -9
- data/src/diagnostic.c +7 -1
- data/src/prism.c +16 -3
- data/src/util/pm_integer.c +9 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c27362d3d2d174aeaeab0db8eaf69b47d618f4c2948c9c8a55e96cb927c1ddd6
|
4
|
+
data.tar.gz: f66f7d1e74c9e35c5ce45e8e34240f90cfc659bc5641048f81f3835ae52fd584
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc64bd0ead37af96b5632498babd6860c9f257c98b0f9dc7aae2c78d6a853b9b95ef6a2f625f61ee1348ef41645e5d4c3f256c30357abca33d7d9387b2a76e2e
|
7
|
+
data.tar.gz: 34f22069e23dc9adf8c7968e7dcf929b479ef3650c909c4c3ad142e858d89c529bc53b6bd38c40fa7f00340dbafabb86fdf59ab6ba3367b71f64c43201b4e99a
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,24 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.27.0] - 2024-04-23
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- Implemented `===` for each of the nodes, which will check if equality but ignore the specific ranges of locations.
|
14
|
+
|
15
|
+
### Changed
|
16
|
+
|
17
|
+
- Fix translation of `ItParametersNode` for parser translation.
|
18
|
+
- Fix translation of `dstr` for ruby_parser translation.
|
19
|
+
- Do not allow omitted hash values whose keys end with `!` or `?`.
|
20
|
+
- Split up `Prism::ParseResult` into `Prism::Result` with subclasses `Prism::ParseResult`, `Prism::LexResult`, `Prism::ParseLexResult`, and `Prism::LexCompat::Result`.
|
21
|
+
- Change reflection classes to have only a single `IntegerField` class and rename `DoubleField` to `FloatField`.
|
22
|
+
- Fall back to default `AR` and `CC` in `Makefile`.
|
23
|
+
- Use GC-able symbols for the syntax tree to avoid adding to the global symbol table.
|
24
|
+
- Fix a bug with karatsuba_multiply that would result in a stack overflow.
|
25
|
+
- Fix parser translation when looking for tokens with `srange_find`.
|
26
|
+
|
9
27
|
## [0.26.0] - 2024-04-18
|
10
28
|
|
11
29
|
### Added
|
@@ -458,7 +476,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
458
476
|
|
459
477
|
- 🎉 Initial release! 🎉
|
460
478
|
|
461
|
-
[unreleased]: https://github.com/ruby/prism/compare/v0.
|
479
|
+
[unreleased]: https://github.com/ruby/prism/compare/v0.27.0...HEAD
|
480
|
+
[0.27.0]: https://github.com/ruby/prism/compare/v0.26.0...v0.27.0
|
462
481
|
[0.26.0]: https://github.com/ruby/prism/compare/v0.25.0...v0.26.0
|
463
482
|
[0.25.0]: https://github.com/ruby/prism/compare/v0.24.0...v0.25.0
|
464
483
|
[0.24.0]: https://github.com/ruby/prism/compare/v0.23.0...v0.24.0
|
data/Makefile
CHANGED
@@ -13,6 +13,7 @@ SOEXT ?= $(shell ruby -e 'puts RbConfig::CONFIG["SOEXT"]')
|
|
13
13
|
CPPFLAGS := -Iinclude $(CPPFLAGS)
|
14
14
|
CFLAGS := -g -O2 -std=c99 -Wall -Werror -Wextra -Wpedantic -Wundef -Wconversion -Wno-missing-braces -fPIC -fvisibility=hidden $(CFLAGS)
|
15
15
|
CC ?= cc
|
16
|
+
AR ?= ar
|
16
17
|
WASI_SDK_PATH := /opt/wasi-sdk
|
17
18
|
|
18
19
|
MAKEDIRS ?= mkdir -p
|
@@ -31,11 +32,11 @@ wasm: javascript/src/prism.wasm
|
|
31
32
|
java-wasm: java-wasm/src/test/resources/prism.wasm
|
32
33
|
|
33
34
|
build/libprism.$(SOEXT): $(SHARED_OBJECTS)
|
34
|
-
$(ECHO) "linking $@"
|
35
|
+
$(ECHO) "linking $@ with $(CC)"
|
35
36
|
$(Q) $(CC) $(DEBUG_FLAGS) $(CFLAGS) -shared -o $@ $(SHARED_OBJECTS)
|
36
37
|
|
37
38
|
build/libprism.a: $(STATIC_OBJECTS)
|
38
|
-
$(ECHO) "building $@"
|
39
|
+
$(ECHO) "building $@ with $(AR)"
|
39
40
|
$(Q) $(AR) $(ARFLAGS) $@ $(STATIC_OBJECTS) $(Q1:0=>/dev/null)
|
40
41
|
|
41
42
|
javascript/src/prism.wasm: Makefile $(SOURCES) $(HEADERS)
|
data/config.yml
CHANGED
@@ -134,6 +134,8 @@ errors:
|
|
134
134
|
- INVALID_CHARACTER
|
135
135
|
- INVALID_ENCODING_MAGIC_COMMENT
|
136
136
|
- INVALID_FLOAT_EXPONENT
|
137
|
+
- INVALID_LOCAL_VARIABLE_READ
|
138
|
+
- INVALID_LOCAL_VARIABLE_WRITE
|
137
139
|
- INVALID_MULTIBYTE_CHAR
|
138
140
|
- INVALID_MULTIBYTE_CHARACTER
|
139
141
|
- INVALID_MULTIBYTE_ESCAPE
|
@@ -206,6 +208,7 @@ errors:
|
|
206
208
|
- PATTERN_HASH_KEY
|
207
209
|
- PATTERN_HASH_KEY_DUPLICATE
|
208
210
|
- PATTERN_HASH_KEY_LABEL
|
211
|
+
- PATTERN_HASH_KEY_LOCALS
|
209
212
|
- PATTERN_IDENT_AFTER_HROCKET
|
210
213
|
- PATTERN_LABEL_AFTER_COMMA
|
211
214
|
- PATTERN_REST
|
@@ -737,10 +740,25 @@ nodes:
|
|
737
740
|
fields:
|
738
741
|
- name: new_name
|
739
742
|
type: node
|
743
|
+
comment: |
|
744
|
+
Represents the new name of the global variable that can be used after aliasing. This can be either a global variable, a back reference, or a numbered reference.
|
745
|
+
|
746
|
+
alias $foo $bar
|
747
|
+
^^^^
|
740
748
|
- name: old_name
|
741
749
|
type: node
|
750
|
+
comment: |
|
751
|
+
Represents the old name of the global variable that could be used before aliasing. This can be either a global variable, a back reference, or a numbered reference.
|
752
|
+
|
753
|
+
alias $foo $bar
|
754
|
+
^^^^
|
742
755
|
- name: keyword_loc
|
743
756
|
type: location
|
757
|
+
comment: |
|
758
|
+
The location of the `alias` keyword.
|
759
|
+
|
760
|
+
alias $foo $bar
|
761
|
+
^^^^^
|
744
762
|
comment: |
|
745
763
|
Represents the use of the `alias` keyword to alias a global variable.
|
746
764
|
|
@@ -825,10 +843,25 @@ nodes:
|
|
825
843
|
kind: ArrayNodeFlags
|
826
844
|
- name: elements
|
827
845
|
type: node[]
|
846
|
+
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.
|
828
847
|
- name: opening_loc
|
829
848
|
type: location?
|
849
|
+
comment: |
|
850
|
+
Represents the optional source location for the opening token.
|
851
|
+
|
852
|
+
[1,2,3] # "["
|
853
|
+
%w[foo bar baz] # "%w["
|
854
|
+
%I(apple orange banana) # "%I("
|
855
|
+
foo = 1, 2, 3 # nil
|
830
856
|
- name: closing_loc
|
831
857
|
type: location?
|
858
|
+
comment: |
|
859
|
+
Represents the optional source location for the closing token.
|
860
|
+
|
861
|
+
[1,2,3] # "]"
|
862
|
+
%w[foo bar baz] # "]"
|
863
|
+
%I(apple orange banana) # ")"
|
864
|
+
foo = 1, 2, 3 # nil
|
832
865
|
comment: |
|
833
866
|
Represents an array literal. This can be a regular array using brackets or a special array using % like %w or %i.
|
834
867
|
|
@@ -1047,8 +1080,18 @@ nodes:
|
|
1047
1080
|
- name: arguments
|
1048
1081
|
type: node?
|
1049
1082
|
kind: ArgumentsNode
|
1083
|
+
comment: |
|
1084
|
+
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).
|
1085
|
+
|
1086
|
+
break foo
|
1087
|
+
^^^
|
1050
1088
|
- name: keyword_loc
|
1051
1089
|
type: location
|
1090
|
+
comment: |
|
1091
|
+
The location of the `break` keyword.
|
1092
|
+
|
1093
|
+
break foo
|
1094
|
+
^^^^^
|
1052
1095
|
comment: |
|
1053
1096
|
Represents the use of the `break` keyword.
|
1054
1097
|
|
@@ -1374,8 +1417,7 @@ nodes:
|
|
1374
1417
|
- name: value
|
1375
1418
|
type: node
|
1376
1419
|
comment: |
|
1377
|
-
The value to
|
1378
|
-
represents a non-void expression.
|
1420
|
+
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).
|
1379
1421
|
|
1380
1422
|
@@foo = :bar
|
1381
1423
|
^^^^
|
@@ -1459,13 +1501,44 @@ nodes:
|
|
1459
1501
|
fields:
|
1460
1502
|
- name: parent
|
1461
1503
|
type: node?
|
1504
|
+
comment: |
|
1505
|
+
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.
|
1506
|
+
|
1507
|
+
Foo::Bar
|
1508
|
+
^^^
|
1509
|
+
|
1510
|
+
self::Test
|
1511
|
+
^^^^
|
1512
|
+
|
1513
|
+
a.b::C
|
1514
|
+
^^^
|
1462
1515
|
- name: child
|
1463
1516
|
type: node
|
1464
1517
|
kind:
|
1465
1518
|
- ConstantReadNode
|
1466
1519
|
- MissingNode
|
1520
|
+
comment: |
|
1521
|
+
The right-hand node of the path. Always a `ConstantReadNode` in a
|
1522
|
+
valid Ruby syntax tree.
|
1523
|
+
|
1524
|
+
::Foo
|
1525
|
+
^^^
|
1526
|
+
|
1527
|
+
self::Test
|
1528
|
+
^^^^
|
1529
|
+
|
1530
|
+
a.b::C
|
1531
|
+
^
|
1467
1532
|
- name: delimiter_loc
|
1468
1533
|
type: location
|
1534
|
+
comment: |
|
1535
|
+
The location of the `::` delimiter.
|
1536
|
+
|
1537
|
+
::Foo
|
1538
|
+
^^
|
1539
|
+
|
1540
|
+
One::Two
|
1541
|
+
^^
|
1469
1542
|
comment: |
|
1470
1543
|
Represents accessing a constant through a path of `::` operators.
|
1471
1544
|
|
@@ -1522,10 +1595,28 @@ nodes:
|
|
1522
1595
|
- name: target
|
1523
1596
|
type: node
|
1524
1597
|
kind: ConstantPathNode
|
1598
|
+
comment: |
|
1599
|
+
A node representing the constant path being written to.
|
1600
|
+
|
1601
|
+
Foo::Bar = 1
|
1602
|
+
^^^^^^^^
|
1603
|
+
|
1604
|
+
::Foo = :abc
|
1605
|
+
^^^^^
|
1525
1606
|
- name: operator_loc
|
1526
1607
|
type: location
|
1608
|
+
comment: |
|
1609
|
+
The location of the `=` operator.
|
1610
|
+
|
1611
|
+
::ABC = 123
|
1612
|
+
^
|
1527
1613
|
- name: value
|
1528
1614
|
type: node
|
1615
|
+
comment: |
|
1616
|
+
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).
|
1617
|
+
|
1618
|
+
FOO::BAR = :abc
|
1619
|
+
^^^^
|
1529
1620
|
comment: |
|
1530
1621
|
Represents writing to a constant path.
|
1531
1622
|
|
@@ -1565,12 +1656,36 @@ nodes:
|
|
1565
1656
|
fields:
|
1566
1657
|
- name: name
|
1567
1658
|
type: constant
|
1659
|
+
comment: |
|
1660
|
+
The name of the [constant](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#constants).
|
1661
|
+
|
1662
|
+
Foo = :bar # name `:Foo`
|
1663
|
+
|
1664
|
+
XYZ = 1 # name `:XYZ`
|
1568
1665
|
- name: name_loc
|
1569
1666
|
type: location
|
1667
|
+
comment: |
|
1668
|
+
The location of the constant name.
|
1669
|
+
|
1670
|
+
FOO = 1
|
1671
|
+
^^^
|
1570
1672
|
- name: value
|
1571
1673
|
type: node
|
1674
|
+
comment: |
|
1675
|
+
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).
|
1676
|
+
|
1677
|
+
FOO = :bar
|
1678
|
+
^^^^
|
1679
|
+
|
1680
|
+
MyClass = Class.new
|
1681
|
+
^^^^^^^^^
|
1572
1682
|
- name: operator_loc
|
1573
1683
|
type: location
|
1684
|
+
comment: |
|
1685
|
+
The location of the `=` operator.
|
1686
|
+
|
1687
|
+
FOO = :bar
|
1688
|
+
^
|
1574
1689
|
comment: |
|
1575
1690
|
Represents writing to a constant.
|
1576
1691
|
|
@@ -1860,12 +1975,36 @@ nodes:
|
|
1860
1975
|
fields:
|
1861
1976
|
- name: name
|
1862
1977
|
type: constant
|
1978
|
+
comment: |
|
1979
|
+
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.
|
1980
|
+
|
1981
|
+
$foo = :bar # name `:$foo`
|
1982
|
+
|
1983
|
+
$_Test = 123 # name `:$_Test`
|
1863
1984
|
- name: name_loc
|
1864
1985
|
type: location
|
1986
|
+
comment: |
|
1987
|
+
The location of the global variable's name.
|
1988
|
+
|
1989
|
+
$foo = :bar
|
1990
|
+
^^^^
|
1865
1991
|
- name: value
|
1866
1992
|
type: node
|
1993
|
+
comment: |
|
1994
|
+
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).
|
1995
|
+
|
1996
|
+
$foo = :bar
|
1997
|
+
^^^^
|
1998
|
+
|
1999
|
+
$-xyz = 123
|
2000
|
+
^^^
|
1867
2001
|
- name: operator_loc
|
1868
2002
|
type: location
|
2003
|
+
comment: |
|
2004
|
+
The location of the `=` operator.
|
2005
|
+
|
2006
|
+
$foo = :bar
|
2007
|
+
^
|
1869
2008
|
comment: |
|
1870
2009
|
Represents writing to a global variable.
|
1871
2010
|
|
@@ -1933,26 +2072,87 @@ nodes:
|
|
1933
2072
|
fields:
|
1934
2073
|
- name: if_keyword_loc
|
1935
2074
|
type: location?
|
2075
|
+
comment: |
|
2076
|
+
The location of the `if` keyword if present.
|
2077
|
+
|
2078
|
+
bar if foo
|
2079
|
+
^^
|
2080
|
+
|
2081
|
+
The `if_keyword_loc` field will be `nil` when the `IfNode` represents a ternary expression.
|
1936
2082
|
- name: predicate
|
1937
2083
|
type: node
|
2084
|
+
comment: |
|
2085
|
+
The node for the condition the `IfNode` is testing.
|
2086
|
+
|
2087
|
+
if foo
|
2088
|
+
^^^
|
2089
|
+
bar
|
2090
|
+
end
|
2091
|
+
|
2092
|
+
bar if foo
|
2093
|
+
^^^
|
2094
|
+
|
2095
|
+
foo ? bar : baz
|
2096
|
+
^^^
|
1938
2097
|
- name: then_keyword_loc
|
1939
2098
|
type: location?
|
2099
|
+
comment: |
|
2100
|
+
The location of the `then` keyword (if present) or the `?` in a ternary expression, `nil` otherwise.
|
2101
|
+
|
2102
|
+
if foo then bar end
|
2103
|
+
^^^^
|
2104
|
+
|
2105
|
+
a ? b : c
|
2106
|
+
^
|
1940
2107
|
- name: statements
|
1941
2108
|
type: node?
|
1942
2109
|
kind: StatementsNode
|
2110
|
+
comment: |
|
2111
|
+
Represents the body of statements that will be executed when the predicate is evaluated as truthy. Will be `nil` when no body is provided.
|
2112
|
+
|
2113
|
+
if foo
|
2114
|
+
bar
|
2115
|
+
^^^
|
2116
|
+
baz
|
2117
|
+
^^^
|
2118
|
+
end
|
1943
2119
|
- name: consequent
|
1944
2120
|
type: node?
|
2121
|
+
comment: |
|
2122
|
+
Represents an `ElseNode` or an `IfNode` when there is an `else` or an `elsif` in the `if` statement.
|
2123
|
+
|
2124
|
+
if foo
|
2125
|
+
bar
|
2126
|
+
elsif baz
|
2127
|
+
^^^^^^^^^
|
2128
|
+
qux
|
2129
|
+
^^^
|
2130
|
+
end
|
2131
|
+
^^^
|
2132
|
+
|
2133
|
+
if foo then bar else baz end
|
2134
|
+
^^^^^^^^^^^^
|
1945
2135
|
- name: end_keyword_loc
|
1946
2136
|
type: location?
|
2137
|
+
comment: |
|
2138
|
+
The location of the `end` keyword if present, `nil` otherwise.
|
2139
|
+
|
2140
|
+
if foo
|
2141
|
+
bar
|
2142
|
+
end
|
2143
|
+
^^^
|
1947
2144
|
newline: predicate
|
1948
2145
|
comment: |
|
1949
|
-
Represents the use of the `if` keyword, either in the block form or the modifier form.
|
2146
|
+
Represents the use of the `if` keyword, either in the block form or the modifier form, or a ternary expression.
|
1950
2147
|
|
1951
2148
|
bar if foo
|
1952
2149
|
^^^^^^^^^^
|
1953
2150
|
|
1954
2151
|
if foo then bar end
|
1955
2152
|
^^^^^^^^^^^^^^^^^^^
|
2153
|
+
|
2154
|
+
foo ? bar : baz
|
2155
|
+
^^^^^^^^^^^^^^^
|
1956
2156
|
- name: ImaginaryNode
|
1957
2157
|
fields:
|
1958
2158
|
- name: numeric
|
@@ -2215,8 +2415,7 @@ nodes:
|
|
2215
2415
|
- name: value
|
2216
2416
|
type: node
|
2217
2417
|
comment: |
|
2218
|
-
The value to
|
2219
|
-
represents a non-void expression.
|
2418
|
+
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).
|
2220
2419
|
|
2221
2420
|
@foo = :bar
|
2222
2421
|
^^^^
|
@@ -2507,14 +2706,50 @@ nodes:
|
|
2507
2706
|
fields:
|
2508
2707
|
- name: name
|
2509
2708
|
type: constant
|
2709
|
+
comment: |
|
2710
|
+
The name of the local variable, which is an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
|
2711
|
+
|
2712
|
+
foo = :bar # name `:foo`
|
2713
|
+
|
2714
|
+
abc = 123 # name `:abc`
|
2510
2715
|
- name: depth
|
2511
2716
|
type: uint32
|
2717
|
+
comment: |
|
2718
|
+
The number of semantic scopes we have to traverse to find the declaration of this variable.
|
2719
|
+
|
2720
|
+
foo = 1 # depth 0
|
2721
|
+
|
2722
|
+
tap { foo = 1 } # depth 1
|
2723
|
+
|
2724
|
+
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).
|
2512
2725
|
- name: name_loc
|
2513
2726
|
type: location
|
2727
|
+
comment: |
|
2728
|
+
The location of the variable name.
|
2729
|
+
|
2730
|
+
foo = :bar
|
2731
|
+
^^^
|
2514
2732
|
- name: value
|
2515
2733
|
type: node
|
2734
|
+
comment: |
|
2735
|
+
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).
|
2736
|
+
|
2737
|
+
foo = :bar
|
2738
|
+
^^^^
|
2739
|
+
|
2740
|
+
abc = 1234
|
2741
|
+
^^^^
|
2742
|
+
|
2743
|
+
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.
|
2744
|
+
|
2745
|
+
foo = foo
|
2516
2746
|
- name: operator_loc
|
2517
2747
|
type: location
|
2748
|
+
comment: |
|
2749
|
+
The location of the `=` operator.
|
2750
|
+
|
2751
|
+
x = :y
|
2752
|
+
^
|
2518
2753
|
comment: |
|
2519
2754
|
Represents writing to a local variable.
|
2520
2755
|
|
@@ -3166,6 +3401,7 @@ nodes:
|
|
3166
3401
|
kind: StringFlags
|
3167
3402
|
- name: filepath
|
3168
3403
|
type: string
|
3404
|
+
comment: Represents the file path being parsed. This corresponds directly to the `filepath` option given to the various `Prism::parse*` APIs.
|
3169
3405
|
comment: |
|
3170
3406
|
Represents the use of the `__FILE__` keyword.
|
3171
3407
|
|
@@ -3287,18 +3523,55 @@ nodes:
|
|
3287
3523
|
fields:
|
3288
3524
|
- name: keyword_loc
|
3289
3525
|
type: location
|
3526
|
+
comment: |
|
3527
|
+
The location of the `unless` keyword.
|
3528
|
+
|
3529
|
+
unless cond then bar end
|
3530
|
+
^^^^^^
|
3531
|
+
|
3532
|
+
bar unless cond
|
3533
|
+
^^^^^^
|
3290
3534
|
- name: predicate
|
3291
3535
|
type: node
|
3536
|
+
comment: |
|
3537
|
+
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).
|
3538
|
+
|
3539
|
+
unless cond then bar end
|
3540
|
+
^^^^
|
3541
|
+
|
3542
|
+
bar unless cond
|
3543
|
+
^^^^
|
3292
3544
|
- name: then_keyword_loc
|
3293
3545
|
type: location?
|
3546
|
+
comment:
|
3547
|
+
The location of the `then` keyword, if present.
|
3548
|
+
|
3549
|
+
unless cond then bar end
|
3550
|
+
^^^^
|
3294
3551
|
- name: statements
|
3295
3552
|
type: node?
|
3296
3553
|
kind: StatementsNode
|
3554
|
+
comment: |
|
3555
|
+
The body of statements that will executed if the unless condition is
|
3556
|
+
falsey. Will be `nil` if no body is provided.
|
3557
|
+
|
3558
|
+
unless cond then bar end
|
3559
|
+
^^^
|
3297
3560
|
- name: consequent
|
3298
3561
|
type: node?
|
3299
3562
|
kind: ElseNode
|
3563
|
+
comment: |
|
3564
|
+
The else clause of the unless expression, if present.
|
3565
|
+
|
3566
|
+
unless cond then bar else baz end
|
3567
|
+
^^^^^^^^
|
3300
3568
|
- name: end_keyword_loc
|
3301
3569
|
type: location?
|
3570
|
+
comment: |
|
3571
|
+
The location of the `end` keyword, if present.
|
3572
|
+
|
3573
|
+
unless cond then bar end
|
3574
|
+
^^^
|
3302
3575
|
newline: predicate
|
3303
3576
|
comment: |
|
3304
3577
|
Represents the use of the `unless` keyword, either in the block form or the modifier form.
|