fix(loc): C# drops a declaration under a brace-less for body from lloc

Abierto Apto para principiantes
#1,887 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
78/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
rust
Área
testing-qa

Línea de trabajo

Empieza por src/metrics/loc/csharp.rs e inspecciona el recorrido de ancestros de local_declaration_statement que omite las declaraciones dentro de un for. Compara su comportamiento con la corrección de la familia JavaScript mencionada en #1283. Añade una prueba de regresión de C# para la entrada reportada con for y switch sin llaves, y luego confirma que lloc es 4 y sigue siendo 4 cuando unas llaves rodean el cuerpo del for.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug

A declaration that is the unbraced body of a for, or sits under one with no block between, is dropped from lloc in C#.

Reproduction

Inside class A { void F() { … } }, values are lloc of the unit.

Input Expected Actual
for (int i = 0; i < 2; i++) switch (i) { case 0: int y = 1; break; } 4 (for, switch, the declaration, break) 3
the same with braces around the for body 4 4

Cause

src/metrics/loc/csharp.rs skips a local_declaration_statement whose ancestor walk reaches a for before a block, to keep a for header's declaration from counting as a statement. In tree-sitter-c-sharp 0.23.5 a for initializer is a variable_declaration, never a local_declaration_statement, so the gate cannot fire for a header. It fires only for a declaration in the for body with no block between, where it drops a real statement.

This is the miss #1283 fixed for the JS family (js_family_braceless_for_body_declaration_counts). The same brace-less switch shape in Java also read 3; not investigated further.

Why it is filed from #1736

The escaped mutant replace == with != in <impl Loc for CsharpCode>::compute on that gate differs from the original only on inputs like the first row, where the original undercounts and the mutant reads 4. A test that kills it would pin the wrong value. It stays open on #1736 until this is fixed.

Lenguaje dominante
Rust
Estrellas
32
Forks
3
Merge medio
9 h 55 min
PR fusionados (30 d)
102

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de dekobon/big-code-analysis

Todos los issues de dekobon/big-code-analysis

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.