Open qarmin opened 1 year ago
Compilation involves further processing. Something might be valid syntactically but in later stages the compiler might reject it due to additional rules that come into play when bytecode is to be generated.
This comparison might make more sense using the rest of the implementation in RustPython whereby you can actually test compile vs compile instead of compile vs parse.
If you only care about parsing, you could re-do the test using CPython's parser.
I'll close for now, feel free to open again if I missed something or if you re-run the test with CPython's parser and you do actually find discrepancies. Thanks!
@DimitrisJim Because we actually have parser incompatibility, the test set looks very useful.
@qarmin Rather than py_compile, using ast will make more sense to exclude compile step
@qarmin Do you know about the license of the test set? It will be helpful if we can include it to our test suite.
This files(or minimized part of them) I took from most popular pypi libraries, so licenses are mixed.
How to parse file in python?
Chatgpt provide this solution, but don't know if this is proper
import ast
def parse_python_file(file_path):
with open(file_path, 'r') as file:
source_code = file.read()
try:
ast.parse(source_code)
except SyntaxError as e:
print(f"Syntax error in {file_path}: {e}")
raise Exception()
parse_python_file('plik.py')
When using ast.parse
(from above example) instead py_compile
I got different set of invalid files
OutputASTInvalid.zip
Thanks a lot! I am sorry for late response. I am also trying to make a tool to do it easier.
You can make a compatibility test like this: https://github.com/RustPython/Parser/pull/75/files#diff-44ab11717bbf68e3aa212e22772a18520ff7c749632213defcaecacdd1f6ecaa
d23611db65dca2a71eb58fdcdce9d637f8fef8c2
When parsing with this repo multiple files, I found that sometimes python cannot parse file but this library can and vice versa.
Command to check if python can parse file
Code to check if parser can parse file
Only ~3% files from pack, can be parsed by python, but not rustpython parser
Pack 644 files - OUTPUT_FILES.zip
Example files and errors