Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

fix(editor): Format SQL uppercases words inside string literals, quoted identifiers and comments

Abierto
#1,566 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
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
48/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
dart, flutter, sql
Área
database

Línea de trabajo

Read lib/core/actions/sql_script_format.dart and the existing scanner in lib/core/database/destructive_sql_detector.dart, then review test/core/actions/sql_script_format_test.dart and SqlQueryTabSession.formatSql in lib/features/workspace/sql_query_tab_session.dart. Coordinate with issue #1511 because it touches the same detector. Done means formatting changes SQL keywords only in code segments, preserves the caret position, and the listed literal, identifier, comment, escape, and unterminated-literal cases are covered by tests.

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

Descripción

bug core editor P1 parser

Problem

Format SQL Query (command palette, Shift+Alt+F) calls formatSqlScript (lib/core/actions/sql_script_format.dart:64), which runs one regex over the whole text and uppercases every word found in _kSqlKeywords. It does not know about string literals, quoted identifiers or comments:

Before After Effect
WHERE status = 'not null' WHERE status = 'NOT NULL' query now matches different rows
SELECT "order", "desc" FROM t SELECT "ORDER", "DESC" FROM t PostgreSQL: quoted identifiers are case-sensitive, the query fails (column does not exist)
SELECT `limit` FROM t (MySQL) SELECT `LIMIT` FROM t changes the identifier on case-sensitive table names
$$ ... begin ... end $$ (function body) body rewritten changes stored code
-- set in prod -- SET IN prod cosmetic

The only test (test/core/actions/sql_script_format_test.dart) checks a literal with no keywords inside.

Also in SqlQueryTabSession.formatSql (lib/features/workspace/sql_query_tab_session.dart:102-108) the caret always jumps to the end of the document after formatting.

Fix

  • Format only code segments. Scanning logic already exists in DestructiveSqlDetector.stripCommentsAndStrings (lib/core/database/destructive_sql_detector.dart:213: --, /* */, $tag$, '...'), but it drops the segments and does not know "..." / `...`. Extract one lexical scanner that yields segments (code, string, quoted identifier, comment, dollar-quoted body) and use it in the formatter (and later in the stripper / splitter; coordinate with #1511 which touches the same detector).
  • Keep the caret where it was, mapped onto the new text. Keywords keep their length, so the offset is unchanged.
  • Tests: each row of the table above, plus nested '' escapes and an unterminated literal.
Lenguaje dominante
Dart
Estrellas
23
Forks
1
Merge medio
32 min
PR fusionados (30 d)
537

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

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 QueryaHub/Querya-Desktop

Todos los issues de QueryaHub/Querya-Desktop

Issues similares

Más issues de Dart

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.