Commit Graph

39 Commits

Author SHA1 Message Date
konsti 4d03b9b5b2
Fix empty lambda args range (#35)
Previously, empty lambda arguments (e.g. `lambda: 1`) would get the
range of the entire expression, which leads to incorrect comment
placement. Now empty lambda arguments get an empty range between the
`lambda` and the `:` tokens.
2023-07-21 17:41:19 +02:00
konsti db04fd4157
Refactor if statement, introduce nodes for elif and else (#22)
The old if layout couldn't differentiate between an else block with a
single if statement and an elif statement. Additionally we getting rid
of the recursion in favor of a single if struct with a vec of elif/else
children. This is accompanied by a big refactoring in ruff which removes
a bunch of TODOs and false negatives.
2023-07-18 13:14:40 +02:00
Zanie 126652b684 Fix decorator ranges
Incorrectly merged LALRPOP file
2023-07-17 14:49:14 -05:00
Zanie Blue a843a00f6b Add parsing of type alias statements i.e. the `type` keyword (#97)
Extends #95
Closes #82

Adds parsing of new `type` soft keyword for defining type aliases.

Supports type alias statements as defined in PEP 695 e.g.

```python
type IntOrStr = int | str

type ListOrSet[T] = list[T] | set[T]

type AnimalOrVegetable = Animal | "Vegetable"

type RecursiveList[T] = T | list[RecursiveList[T]]
```

All type parameter kinds are supported as in #95.

Builds on soft keyword abstractions introduced in https://github.com/RustPython/RustPython/pull/4519
2023-07-17 14:49:14 -05:00
Zanie Blue f846f1ea42 Parse type parameters in function definitions (#96)
* Parse type parameters in function definitions
* Add test for combined items
2023-07-17 14:49:14 -05:00
Zanie ed7acfe477 Parse type parameters in class definitions 2023-07-17 14:49:14 -05:00
Zanie c31b58eb39 Move `type_param` stubs into LALRPOP definition 2023-07-17 14:49:14 -05:00
Micha Reiser 8078663b6c
Remove Range type parameter from AST nodes (#15) 2023-06-23 21:18:55 +01:00
Micha Reiser 08ebbe40d7
Fix ArgWithDefault TextRange (#13) 2023-06-20 18:21:09 +02:00
Charlie Marsh ed3b4eb72b
Add `TextRange` to `Identifier` (#8)
## Summary

This PR adds `TextRange` to `Identifier`. Right now, the AST only
includes ranges for identifiers in certain cases (`Expr::Name`,
`Keyword`, etc.), namely when the identifier comprises an entire AST
node. In Ruff, we do additional ad-hoc lexing to extract identifiers
from source code.

One frequent example: given a function `def f(): ...`, we lex to find
the range of `f`, for use in diagnostics.

Another: `except ValueError as e`, for which the AST doesn't include a
range for `e`.

Note that, as an optimization, we avoid storing the `TextRange` for
`Expr::Name`, since it's already included.
2023-06-20 11:19:27 -04:00
Micha Reiser 6f65c5cba7 Add `Decorator` node (#7) 2023-06-19 12:53:05 -04:00
Micha Reiser 8a415fa61e Include argument parentheses in range (#5) 2023-06-19 12:51:18 -04:00
Micha Reiser 5054cbe84f Merge branch 'RustPython:main' into main 2023-06-19 12:38:24 -04:00
Jeong, YunWon 69d27d924c
Rename unconventional nodes (#74) 2023-06-17 01:54:00 +09:00
Steve Shi a2e3209c42
Replace num-bigint with malachite-bigint (#18)
Co-authored-by: Jeong YunWon <jeong@youknowone.org>
2023-06-02 17:06:18 +09:00
Jeong, YunWon fdec727f80
New Arguments and Arg/ArgWithDefault AST representation (#59) 2023-06-01 01:15:23 +09:00
Micha Reiser 342cd19f50
Add safety comment 2023-05-31 09:37:48 +02:00
Micha Reiser 4a2c4aad0b
Align `MatchCase` end location 2023-05-30 17:31:51 +02:00
Micha Reiser 5493c9f4e3
Avoid removing elements from the beginning of a vec (#69) 2023-05-25 19:44:49 +09:00
Micha Reiser 25cc1da319
Include decorators in `Class` and `FunctionDef` range 2023-05-19 08:18:43 +02:00
Micha Reiser fac0c25343
Update `python.rs` 2023-05-19 08:08:35 +02:00
Micha Reiser 726884b287
Avoid allocating `vec`s for each statement 2023-05-18 21:56:17 +02:00
Micha Reiser 851f23668f
Use named parameters to reducue copying 2023-05-18 21:41:06 +02:00
Jeong, YunWon 6c5c311bab
Fix range field order (#56)
* Skip validate_arguments when empty

* Fix `range` field order

* Fix unused variable
2023-05-18 21:44:01 +09:00
Jeong, YunWon 27e3873dc2
Add full-lexer feature (#36) 2023-05-16 02:21:34 +09:00
Micha Reiser dd4cc25227
Reduce copying elements when parsing (#35) 2023-05-15 23:20:44 +09:00
Micha Reiser 192379cede
Move `range` from `Attributed` to `Node`s (#22)
* Move `range` from `Attributed` to `Node`s

* No Attributed + custom for Range PoC

* Generate all located variants, generate enum implementations

* Implement `Copy` on simple enums

* Move `Suite` to `ranged` and `located`

* Update tests
---------

Co-authored-by: Jeong YunWon <jeong@youknowone.org>
2023-05-15 15:08:12 +09:00
Jeong YunWon aabc96dde9 ruff integration support 2023-05-11 04:08:57 +09:00
Jeong YunWon aa101e4f26 fix ImportDots 2023-05-10 20:31:04 +09:00
Jeong YunWon 6fa3d0f90a Fine-tune int types 2023-05-10 19:33:39 +09:00
Jeong YunWon 455bcc01a0 Give identifier and int ast types 2023-05-10 19:33:39 +09:00
Jeong YunWon a3d9d8cb14 numerous refactoring
- Split parser core and compiler core. Fix #14
- AST int type to `u32`
- Updated asdl_rs.py and update_asdl.sh fix #6
- Use `ruff_python_ast::SourceLocation` for Python source location. Deleted our own Location.
- Renamed ast::Located to ast::Attributed to distinguish terms for TextSize and SourceLocation
- `ast::<Node>`s for TextSize located ast. `ast::located::<Node>` for Python source located ast.
- And also strictly renaming `located` to refer only python location related interfaces.
- `SourceLocator` to convert locations.
- New `source-code` features of to disable python locations when unnecessary.
- Also including fully merging https://github.com/astral-sh/RustPython/pull/4 closes #9
2023-05-10 14:35:38 +09:00
Jeong YunWon a14e43e03a Separate byteoffset ast and located ast 2023-05-09 00:21:52 +09:00
Jeong YunWon f47dfca4e3 Rename compiler Location to TextSize 2023-05-08 03:38:10 +09:00
Micha Reiser 58c35ab458 Replace row/column based Location with byte-offsets. 2023-05-08 03:38:10 +09:00
Jeong YunWon 6d7358090b Refactor ast to hold data as seperated type 2023-05-07 19:20:47 +09:00
Jeong YunWon e1f70100ac Update parser/build.rs to embed python.rs 2023-05-06 05:28:30 +09:00
Martin Fischer 4f1e7c6291 Fix docs.rs build for rustpython-parser
docs.rs failed to build the documentation of the recently released
rustpython-parser 0.2.0 because the build.rs script couldn't write the
parser.rs file because docs.rs builds the documentation in a sandbox
with a read-only filesystem.

This commit fixes this by writing the parser.rs file to the cargo output
directory instead, as recommended by the docs.rs documentation.[1]

Fixes #4436.

[1]: https://docs.rs/about/builds#read-only-directories
2023-01-11 09:58:10 +01:00
Jeong YunWon 53c48bf6b9 reorganize compiler crates 2022-08-22 04:42:42 +09:00