prism 0.17.1 → 0.19.0
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|