prism 0.17.1 → 0.19.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 +60 -1
- data/Makefile +5 -5
- data/README.md +4 -3
- data/config.yml +214 -68
- data/docs/build_system.md +6 -6
- data/docs/building.md +10 -3
- data/docs/configuration.md +11 -9
- data/docs/encoding.md +92 -88
- data/docs/heredocs.md +1 -1
- data/docs/javascript.md +29 -1
- data/docs/local_variable_depth.md +229 -0
- data/docs/ruby_api.md +16 -0
- data/docs/serialization.md +18 -13
- data/ext/prism/api_node.c +411 -240
- data/ext/prism/extconf.rb +97 -127
- data/ext/prism/extension.c +97 -33
- data/ext/prism/extension.h +1 -1
- data/include/prism/ast.h +377 -159
- data/include/prism/defines.h +17 -0
- data/include/prism/diagnostic.h +38 -6
- data/include/prism/{enc/pm_encoding.h → encoding.h} +126 -64
- data/include/prism/options.h +2 -2
- data/include/prism/parser.h +62 -36
- data/include/prism/regexp.h +2 -2
- data/include/prism/util/pm_buffer.h +9 -1
- data/include/prism/util/pm_memchr.h +2 -2
- data/include/prism/util/pm_strpbrk.h +3 -3
- data/include/prism/version.h +3 -3
- data/include/prism.h +13 -15
- data/lib/prism/compiler.rb +15 -3
- data/lib/prism/debug.rb +13 -4
- data/lib/prism/desugar_compiler.rb +4 -3
- data/lib/prism/dispatcher.rb +70 -14
- data/lib/prism/dot_visitor.rb +4612 -0
- data/lib/prism/dsl.rb +77 -57
- data/lib/prism/ffi.rb +19 -6
- data/lib/prism/lex_compat.rb +19 -9
- data/lib/prism/mutation_compiler.rb +26 -6
- data/lib/prism/node.rb +1314 -522
- data/lib/prism/node_ext.rb +102 -19
- data/lib/prism/parse_result.rb +58 -27
- data/lib/prism/ripper_compat.rb +49 -34
- data/lib/prism/serialize.rb +251 -227
- data/lib/prism/visitor.rb +15 -3
- data/lib/prism.rb +21 -4
- data/prism.gemspec +7 -9
- data/rbi/prism.rbi +688 -284
- data/rbi/prism_static.rbi +3 -0
- data/sig/prism.rbs +426 -156
- data/sig/prism_static.rbs +1 -0
- data/src/diagnostic.c +280 -216
- data/src/encoding.c +5137 -0
- data/src/node.c +99 -21
- data/src/options.c +21 -2
- data/src/prettyprint.c +1743 -1241
- data/src/prism.c +1774 -831
- data/src/regexp.c +15 -15
- data/src/serialize.c +261 -164
- data/src/util/pm_buffer.c +10 -1
- data/src/util/pm_memchr.c +1 -1
- data/src/util/pm_strpbrk.c +4 -4
- metadata +8 -10
- data/src/enc/pm_big5.c +0 -53
- data/src/enc/pm_euc_jp.c +0 -59
- data/src/enc/pm_gbk.c +0 -62
- data/src/enc/pm_shift_jis.c +0 -57
- data/src/enc/pm_tables.c +0 -743
- data/src/enc/pm_unicode.c +0 -2369
- data/src/enc/pm_windows_31j.c +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72e48ffbc7a58cb622a709f860470c4cf2178113a2ba6a2c9cd4f838229ccff8
|
4
|
+
data.tar.gz: 709ecc0c274a141a868661f94d28aad3fda3032e1b253b2f699a15ff71200c37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42a21574ff5ca1ce62c836839a8c54ed7d6a3f943cfbbd13d860aa30f3d1cf2b6fd5add3082d7622b30e3403ecbf98a404f3c9ef831744e60d40deabeae44ba2
|
7
|
+
data.tar.gz: 8ef39e9818ba2f13808a0e1131514709e6c7cbbbf2a0c784d047637d56b0024d35951a852c91d8f29c72477b5e923a6cc2687335cf44ccc761ab2e8e5eb5e521
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,63 @@ 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.19.0] - 2023-12-14
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- `ArrayNode` now has a `contains_splat?` flag if it has a splatted element in it.
|
14
|
+
- All of the remaining encodings have been implemented.
|
15
|
+
- Allow forwarding `&` in a method that has a `...` parameter.
|
16
|
+
- Many statements that are found in non-statement positions are being properly rejected now.
|
17
|
+
- Void values are now properly checked.
|
18
|
+
- Referencing a parameter in its own default value is now properly rejected.
|
19
|
+
- `DATA`/`__END__` is now parsed as its own field on parse result (`data_loc`) as opposed to as a comment.
|
20
|
+
- Blank `*` now properly forwards into arrays.
|
21
|
+
- `ImplicitRestNode` is introduced to represent the implicit rest of a destructure.
|
22
|
+
- We now support negative start lines.
|
23
|
+
- `StringNode#heredoc?`, `InterpolatedStringNode#heredoc?`, `XStringNode#heredoc?`, and `InterpolatedXStringNode#heredoc?` are introduced.
|
24
|
+
- `NumberedParametersNode` is introduced to represent the implicit set of parameters when numbered parameters are used.
|
25
|
+
- `Prism::parse_success?` and `Prism::parse_failure?` are introduced to bypass reifying the AST.
|
26
|
+
- We now emit a warning for constant assignments in method definitions.
|
27
|
+
- We now provide flags on strings and xstrings to indicate the correct encoding.
|
28
|
+
- The hash pattern `rest` field now more accurately parses `**` and `**nil`.
|
29
|
+
- The equality operators are now properly parsed as non-associative.
|
30
|
+
|
31
|
+
### Changed
|
32
|
+
|
33
|
+
- **BREAKING**: Many fields have changed positions within their nodes. This impacts the C API and the Ruby API if you are manually creating nodes through the initializer.
|
34
|
+
- **BREAKING**: Almost all of the error messages have been updated to begin with lowercase characters to match ruby/spec.
|
35
|
+
- Unterminated strings with only plain content are now always `StringNode` as opposed to `InterpolatedStringNode`
|
36
|
+
- **BREAKING**: Call node has been split up when it is in the target position into `CallTargetNode` and `IndexTargetNode`.
|
37
|
+
|
38
|
+
## [0.18.0] - 2023-11-21
|
39
|
+
|
40
|
+
### Added
|
41
|
+
|
42
|
+
- The `ParametersNode#signature` method is added, which returns the same thing as `Method#parameters`.
|
43
|
+
- Visitor functionality has been added to the JavaScript API.
|
44
|
+
- The `Node#to_dot` API has been added to convert syntax trees to Graphviz digraphs.
|
45
|
+
- `IfNode` and `UnlessNode` now have a `then_keyword_loc` field.
|
46
|
+
- Many more encodings are now supported.
|
47
|
+
- Some new `Location` APIs have been added for dealing with characters instead of bytes, which are: `start_character_offset`, `end_character_offset`, `start_character_column`, and `end_character_column`.
|
48
|
+
- A warning has been added for when `END {}` is used within a method.
|
49
|
+
- `ConstantPathNode#full_name{,_parts}` will now raise an error if the receiver of the constant path is not itself a constant.
|
50
|
+
- The `in` keyword and the `=>` operator now respect non-associativity.
|
51
|
+
- The `..` and `...` operators now properly respect non-associativity.
|
52
|
+
|
53
|
+
### Changed
|
54
|
+
|
55
|
+
- Previously `...` in blocks was accepted, but it is now properly rejected.
|
56
|
+
- **BREAKING**: `librubyparser.*` has been renamed to `libprism.*` in the C API.
|
57
|
+
- We now properly reject floats with exponent and rational suffixes.
|
58
|
+
- We now properly reject void value expressions.
|
59
|
+
- **BREAKING**: The `--disable-static` option has been removed from the C extension.
|
60
|
+
- The rescue modifier keyword is now properly parsed in terms of precedence.
|
61
|
+
- We now properly reject defining a numbered parameter method.
|
62
|
+
- **BREAKING**: `MatchWriteNode` now has a list of `targets`, which are local variable target nodes. This is instead of `locals` which was a constant list. This is to support writing to local variables outside the current scope. It has the added benefit of providing location information for the local variable targets.
|
63
|
+
- **BREAKING**: `CaseNode` has been split into `CaseNode` and `CaseMatchNode`, the latter is used for `case ... in` expressions.
|
64
|
+
- **BREAKING**: `StringConcatNode` has been removed in favor of using `InterpolatedStringNode` as a list.
|
65
|
+
|
9
66
|
## [0.17.1] - 2023-11-03
|
10
67
|
|
11
68
|
### Changed
|
@@ -239,7 +296,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
|
|
239
296
|
|
240
297
|
- 🎉 Initial release! 🎉
|
241
298
|
|
242
|
-
[unreleased]: https://github.com/ruby/prism/compare/v0.
|
299
|
+
[unreleased]: https://github.com/ruby/prism/compare/v0.19.0...HEAD
|
300
|
+
[0.19.0]: https://github.com/ruby/prism/compare/v0.18.0...v0.19.0
|
301
|
+
[0.18.0]: https://github.com/ruby/prism/compare/v0.17.1...v0.18.0
|
243
302
|
[0.17.1]: https://github.com/ruby/prism/compare/v0.17.0...v0.17.1
|
244
303
|
[0.17.0]: https://github.com/ruby/prism/compare/v0.16.0...v0.17.0
|
245
304
|
[0.16.0]: https://github.com/ruby/prism/compare/v0.15.1...v0.16.0
|
data/Makefile
CHANGED
@@ -11,7 +11,7 @@ FUZZ_OUTPUT_DIR = $(shell pwd)/fuzz/output
|
|
11
11
|
SOEXT := $(shell ruby -e 'puts RbConfig::CONFIG["SOEXT"]')
|
12
12
|
|
13
13
|
CPPFLAGS := -Iinclude
|
14
|
-
CFLAGS := -g -O2 -std=c99 -Wall -Werror -Wextra -Wpedantic -Wundef -Wconversion -fPIC -fvisibility=hidden
|
14
|
+
CFLAGS := -g -O2 -std=c99 -Wall -Werror -Wextra -Wpedantic -Wundef -Wconversion -Wno-missing-braces -fPIC -fvisibility=hidden
|
15
15
|
CC := cc
|
16
16
|
WASI_SDK_PATH := /opt/wasi-sdk
|
17
17
|
|
@@ -22,15 +22,15 @@ STATIC_OBJECTS := $(subst src/,build/static/,$(SOURCES:.c=.o))
|
|
22
22
|
|
23
23
|
all: shared static
|
24
24
|
|
25
|
-
shared: build/
|
26
|
-
static: build/
|
25
|
+
shared: build/libprism.$(SOEXT)
|
26
|
+
static: build/libprism.a
|
27
27
|
wasm: javascript/src/prism.wasm
|
28
28
|
|
29
|
-
build/
|
29
|
+
build/libprism.$(SOEXT): $(SHARED_OBJECTS)
|
30
30
|
$(ECHO) "linking $@"
|
31
31
|
$(Q) $(CC) $(DEBUG_FLAGS) $(CFLAGS) -shared -o $@ $(SHARED_OBJECTS)
|
32
32
|
|
33
|
-
build/
|
33
|
+
build/libprism.a: $(STATIC_OBJECTS)
|
34
34
|
$(ECHO) "building $@"
|
35
35
|
$(Q) $(AR) $(ARFLAGS) $@ $(STATIC_OBJECTS) $(Q1:0=>/dev/null)
|
36
36
|
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@ This is a parser for the Ruby programming language. It is designed to be portabl
|
|
7
7
|
|
8
8
|
## Overview
|
9
9
|
|
10
|
-
The repository contains the infrastructure for both a shared library (
|
10
|
+
The repository contains the infrastructure for both a shared library (libprism) and a native CRuby extension. The shared library has no bindings to CRuby itself, and so can be used by other projects. The native CRuby extension links against `ruby.h`, and so is suitable in the context of CRuby.
|
11
11
|
|
12
12
|
```
|
13
13
|
.
|
@@ -21,7 +21,7 @@ The repository contains the infrastructure for both a shared library (librubypar
|
|
21
21
|
├── ext
|
22
22
|
│ └── prism
|
23
23
|
│ ├── extconf.rb configuration to generate the Makefile for the native extension
|
24
|
-
│ └── extension.c the native extension that interacts with
|
24
|
+
│ └── extension.c the native extension that interacts with libprism
|
25
25
|
├── fuzz files related to fuzz testing
|
26
26
|
├── include
|
27
27
|
│ ├── prism header files for the shared library
|
@@ -64,7 +64,7 @@ bundle install
|
|
64
64
|
to fetch the Ruby dependencies. Finally, run:
|
65
65
|
|
66
66
|
```
|
67
|
-
rake compile
|
67
|
+
bundle exec rake compile
|
68
68
|
```
|
69
69
|
|
70
70
|
to compile the shared library. It will be built in the `build` directory. To test that everything is working, run:
|
@@ -86,6 +86,7 @@ See the [CONTRIBUTING.md](CONTRIBUTING.md) file for more information. We additio
|
|
86
86
|
* [Fuzzing](docs/fuzzing.md)
|
87
87
|
* [Heredocs](docs/heredocs.md)
|
88
88
|
* [JavaScript](docs/javascript.md)
|
89
|
+
* [Local variable depth](docs/local_variable_depth.md)
|
89
90
|
* [Mapping](docs/mapping.md)
|
90
91
|
* [Releasing](docs/releasing.md)
|
91
92
|
* [Ripper](docs/ripper.md)
|