bug: braced default argument (= {}) in a parameter list is an ERROR
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 84/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- javascript
- Área
- compilers
Línea de trabajo
El issue señala que optional_parameter_declaration solo acepta una expresión para default_value y menciona init_declarator como ejemplo cercano que acepta initializer_list. Lee esas reglas gramaticales y luego analiza las tres declaraciones del repro con tree-sitter para confirmar los errores actuales. La tarea estará terminada cuando las tres listas entre llaves de valores predeterminados se analicen como initializer_list sin errores.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Did you check existing issues?
- I have read all the tree-sitter docs if it relates to using the parser
- I have searched the existing issues of tree-sitter-cpp
Tree-Sitter CLI Version, if relevant (output of tree-sitter --version)
No response
Describe the bug
A default argument written as a braced initializer list, valid since C++11 ([dcl.fct.default] allows an initializer-clause, which includes a braced-init-list), makes the tree contain an error. The default value is recovered as a compound_literal_expression with a MISSING type_identifier, so has_error is true for the whole file.
This is common in modern code (Options = {}, std::vector v = {1, 2}). In one C++20 project it was the most frequent cause of parse errors: 16 of 131 files failed only because of it.
optional_parameter_declaration accepts only an expression as default_value, both in v0.23.4 and on master (c009222), while init_declarator already accepts initializer_list.
Steps To Reproduce/Bad Parse Tree
Save the repro below as repro.cpp.
Run tree-sitter parse repro.cpp, or parse it with any binding.
Parse tree from tree-sitter-cpp 0.23.4 (named nodes only), first declaration:
translation_unit
declaration
type: primitive_type
declarator: function_declarator
declarator: identifier
parameters: parameter_list
optional_parameter_declaration
type: primitive_type
declarator: identifier
default_value: compound_literal_expression
type: type_identifier (MISSING)
value: initializer_list
The other two declarations give the same compound_literal_expression with a MISSING type_identifier.
Expected Behavior/Parse Tree
No error; the braced list is the default value:
optional_parameter_declaration
type: primitive_type
declarator: identifier
default_value: initializer_list
A possible fix is field('default_value', choice($.expression, $.initializer_list)) in optional_parameter_declaration, as init_declarator does for its value.
Repro
void f(int x = {});
void g(std::vector<int> v = {1, 2});
struct Options {};
void h(Options = {});
- Lenguaje dominante
- JavaScript
- Estrellas
- 463
- Forks
- 196
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de tree-sitter/tree-sitter-cpp
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
tree-sitter/tree-sitter-cpp#374 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
tree-sitter/tree-sitter-cpp#371 · 1 comentario ·
-
`tree_sitter_cpp_external_scanner_deserialize` doesn't bound `length` against the size of the delimiter bufferPosiblemente ocupada @dekobon la tomó hace 96 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
tree-sitter/tree-sitter-cpp#368 ·
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 62/100
tree-sitter/tree-sitter-cpp#378 ·
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 70/100
tree-sitter/tree-sitter-cpp#377 · 1 comentario ·
Todos los issues de tree-sitter/tree-sitter-cpp
Issues similares
-
xsd:integer cast from a string rejects negative numbers, a leading + and surrounding whitespaceAbiertobug 🐛
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
comunica/comunica#1960 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Waiting for: Product Owner
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
getsentry/sentry-javascript#26203 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
bytedance/flowgram.ai#1235 ·
Los mantenedores suelen responder en 1 día