mirror of
https://github.com/RustPython/Parser.git
synced 2025-08-27 05:44:52 +00:00
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
This commit is contained in:
parent
09a6afdd04
commit
a3d9d8cb14
29 changed files with 9737 additions and 12000 deletions
|
@ -8,7 +8,6 @@ import textwrap
|
|||
from argparse import ArgumentParser
|
||||
from pathlib import Path
|
||||
from typing import Optional, Dict
|
||||
from attr import dataclass
|
||||
|
||||
import asdl
|
||||
|
||||
|
@ -18,7 +17,7 @@ AUTOGEN_MESSAGE = "// File automatically generated by {}.\n"
|
|||
builtin_type_mapping = {
|
||||
"identifier": "Ident",
|
||||
"string": "String",
|
||||
"int": "usize",
|
||||
"int": "u32",
|
||||
"constant": "Constant",
|
||||
}
|
||||
assert builtin_type_mapping.keys() == asdl.builtin_types
|
||||
|
@ -391,7 +390,18 @@ class FoldTraitDefVisitor(EmitVisitor):
|
|||
depth + 1,
|
||||
)
|
||||
self.emit(
|
||||
"fn map_located<T>(&mut self, located: Attributed<T, U>) -> Result<Attributed<T, Self::TargetU>, Self::Error> { let custom = self.map_user(located.custom)?; Ok(Attributed { range: located.range, custom, node: located.node }) }",
|
||||
"""
|
||||
fn map_located<T>(&mut self, located: Attributed<T, U>) -> Result<Attributed<T, Self::TargetU>, Self::Error> {
|
||||
let custom = self.map_user(located.custom)?;
|
||||
Ok(Attributed { range: located.range, custom, node: located.node })
|
||||
}""",
|
||||
depth + 1,
|
||||
)
|
||||
self.emit(
|
||||
"""
|
||||
fn fold<X: Foldable<U, Self::TargetU>>(&mut self, node: X) -> Result<X::Mapped, Self::Error> {
|
||||
node.fold(self)
|
||||
}""",
|
||||
depth + 1,
|
||||
)
|
||||
for dfn in mod.dfns:
|
||||
|
@ -715,8 +725,8 @@ class TraitImplVisitor(EmitVisitor):
|
|||
return ",".join(rust_field(f.name) for f in fields)
|
||||
|
||||
def gen_sum_fromobj(self, sum, sumname, enumname, rustname, depth):
|
||||
if sum.attributes:
|
||||
self.extract_location(sumname, depth)
|
||||
# if sum.attributes:
|
||||
# self.extract_location(sumname, depth)
|
||||
|
||||
self.emit("let _cls = _object.class();", depth)
|
||||
self.emit("Ok(", depth)
|
||||
|
@ -739,8 +749,8 @@ class TraitImplVisitor(EmitVisitor):
|
|||
self.emit("})", depth)
|
||||
|
||||
def gen_product_fromobj(self, product, prodname, structname, depth):
|
||||
if product.attributes:
|
||||
self.extract_location(prodname, depth)
|
||||
# if product.attributes:
|
||||
# self.extract_location(prodname, depth)
|
||||
|
||||
self.emit("Ok(", depth)
|
||||
self.gen_construction(structname, product, prodname, depth + 1)
|
||||
|
@ -761,11 +771,15 @@ class TraitImplVisitor(EmitVisitor):
|
|||
def extract_location(self, typename, depth):
|
||||
row = self.decode_field(asdl.Field("int", "lineno"), typename)
|
||||
column = self.decode_field(asdl.Field("int", "col_offset"), typename)
|
||||
self.emit(f"""let _location = {{
|
||||
let row = try_location_field({row}, _vm)?;
|
||||
let column = try_location_field({column}, _vm)?;
|
||||
SourceLocation {{ row, column }}
|
||||
}};""", depth)
|
||||
self.emit(
|
||||
f"""
|
||||
let _location = {{
|
||||
let row = {row};
|
||||
let column = {column};
|
||||
try_location(row, column)
|
||||
}};""",
|
||||
depth,
|
||||
)
|
||||
|
||||
def decode_field(self, field, typename):
|
||||
name = json.dumps(field.name)
|
||||
|
@ -805,7 +819,7 @@ def write_located_def(typeinfo, f):
|
|||
f.write(
|
||||
textwrap.dedent(
|
||||
"""
|
||||
use crate::location::SourceRange;
|
||||
use rustpython_parser_core::source_code::SourceRange;
|
||||
|
||||
pub type Located<T> = super::generic::Attributed<T, SourceRange>;
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue