Consolidate the parsetree printers
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 35/100
- Tipo de issue
- Refatoração
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- ocaml
- Domínio
- compilers
Direção de pesquisa
Start with compiler/ml/printast.ml, compiler/syntax/src/res_ast_debugger.ml, compiler/ml/pprintast.ml, and the roundtrip test in scripts/test_syntax.sh. Trace the printer call sites and parser fixture snapshots named in the issue, then check how bsc -dsource handles PPX and builtin rewrites. Done means removing the redundant printers and comparisons while keeping the listed print modes, fixtures, and tests working.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
The compiler has three printers for the parsetree, and each one matches over every node. Every new node (recently Pexp_dict, Ppat_dict, Pexp_ternary, Pmod_await, Ppat_variant_spread) has to be added to all three, on top of the parsetree, the v0 mappers and the formatter.
| Printer | Size | Output | Used by |
|---|---|---|---|
compiler/ml/printast.ml |
827 lines | tree with source locations | bsc -dparsetree, res_parser -print ast, the playground's parsetree view, ounit_parser_recovery_tests |
Sexp_ast in compiler/syntax/src/res_ast_debugger.ml |
~1,040 lines | S-expression without locations, except the offsets of explicit braces (see below) | res_parser -print sexp, used by the formatter roundtrip test |
compiler/ml/pprintast.ml |
1,471 lines | OCaml syntax | res_parser -print ml (expected output for the parser fixtures in tests/syntax_tests/data/parsing), bsc -dsource, a few ounit tests |
Sexp_ast is redundant. The roundtrip test in scripts/test_syntax.sh formats a file twice and checks two things:
- the two formatted texts are equal;
- the ASTs parsed from them are equal (as sexp).
The parser is deterministic, so the AST check holds whenever the text check does. The original file's AST can't usefully be compared with the formatted one, because the formatter changes the AST on purpose, e.g. it removes braces in switch cases.
Sexp_ast prints no locations, with one exception: since #8678 it prints the character offsets of explicit braces (braces_loc of Pexp_braces). That was not intended and nothing depends on it. It should not be carried into any other printer or test.
Pprintast is a leftover from OCaml. ReScript has no other use for printing its AST as OCaml code.
Proposal
- Remove
Sexp_ast,-print sexpand the redundant AST comparison from the roundtrip test. - Snapshot the parser fixtures with
Printastinstead of-print ml. - Make
bsc -dsourceprint the parsetree after PPX and builtin rewrites with the ReScript printer instead of OCaml syntax. - Move
Pprintast.string_of_int_as_char(used byprintlambda.mlandparmatch.ml), then removePprintastandres_driver_ml_printer.ml.
That removes about 2,500 lines, and new parsetree nodes need one printer case instead of three. -print comments and -print doc in res_ast_debugger.ml, Printtyped and Printlambda are not affected.
Compatibility: res_parser isn't shipped in the npm packages, so -print sexp and -print ml are internal. bsc -dsource is a debugging flag. Its output switches from OCaml-like to ReScript syntax.
- Linguagem predominante
- OCaml
- Estrelas
- 7.5k
- Forks
- 484
- Merge médio
- 20h 27min
- PRs com merge (30d)
- 120
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de rescript-lang/rescript
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
rescript-lang/rescript#8833 · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
rewatch watch on Linux stops watching a source folder when an overlapping recursive source folder is removed from rescript.jsonTalvez já em andamento @cknitt assumiu há 1 dia. Aberta
Dificuldade 4/5 1-2 dias Facilidade para iniciantes 35/100
rescript-lang/rescript#8825 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
rescript-lang/rescript#8806 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 3/5 Meio dia Facilidade para iniciantes 58/100
rescript-lang/rescript#8757 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 40/100
rescript-lang/rescript#8753 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de rescript-lang/rescript
Issues semelhantes
-
llvm.memcpy with destination align but no source align asserts "Missed Source alignment!"Talvez já em andamento @pvelesko assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
KhronosGroup/SPIRV-LLVM-Translator#4093 ·
Mantenedores costumam responder em até 2 dias
-
UB: (int) cast of a user double outside int range in dispatch / vm_index_is_int / flat_index_atAbertaarea:runtime-vm
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
InauguralSystems/EigenScript#1748 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
leanprover/lean4#15677 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Mantenedores costumam responder em até 1 dia