Region strings' syntax highlighting is broken when they're defined as part of another region themselves

Abierto
#4,148 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 3 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
55/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
go, php, yaml
Área
cli, tooling

Línea de trabajo

Reproduce el problema con ~/.config/micro/syntax/php.yaml y el ejemplo de región anidada; después, compáralo con la forma de expresión regular de constant.string usando el fragmento de PHP proporcionado. Rastrea cómo aplica Micro las reglas dentro de regiones anidadas y verifica que las cadenas mantengan sus límites y precedencia hasta que se cierre la región de atributos envolvente.

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

Descripción

bug triage
Description

I was attempting to do something like the following to add syntax highlighting for PHP's attributes:

# ~/.config/micro/syntax/php.yaml

# Other rules above
- special:
    start: "#\\["
    end: "\\]"
    rules:
        - constant.string:
            start: "'"
            end: "'"
            skip: "\\\\."
# Other rules below

When defined as a above, attributes themselves will be highlighted properly in a PHP file (when placed above the one-line comment definition), but if the attribute contains a string, the string will only be highlighted properly until it matches any other rule in the file, even if it's not defined within the string region itself, as well as the closing quotation mark. For example, in the following code:

#[SomeAttribute('A very !long string *here with /some +symbols')]

Since the exclamation mark character is defined in another, unrelated rule as an operator in the same file, Micro will only highlight the initial 'A very ! and the final ' as a string. The text in between will be highlighted as regular text, following rules defined outside of the attribute region, even before it in the file (when the colors help file states that rules further down in the file should have more priority than rules above them). So string will be highlighted as a type, and *, / and + will be highlighted as operators.

I have tried the same with other region rule definitions, and it seems to be a generalized problem for strings defined as regions within regions. Perhaps other rule definitions besides strings would suffer from this problem. It's worth testing further.

It is worth noting that changing the above YAML configuration to the following does not have this effect:

# ~/.config/micro/syntax/php.yaml

# Other rules above
- special:
    start: "#\\["
    end: "\\]"
    rules:
        - constant.string: "'.*?'"
# Other rules below

The code above doesn't present the same problem, and in this case, strings will only be overwritten based on rules defined below them as part of the same attribute region.

Environment
  • Version: 2.0.13
  • OS: Linux Mint 22.3
  • Terminal: GNOME Terminal
Lenguaje dominante
Go
Estrellas
29.8k
Forks
1.4k
Merge medio
1 d 12 h
PR fusionados (30 d)
2

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

  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 micro-editor/micro

Todos los issues de micro-editor/micro

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.