highlightjs/highlight.js

(C++) Integer literals with quote delimiters in #defines break highlighting

Open

#3.928 aberto em 19 de nov. de 2023

Ver no GitHub
 (11 comments) (0 reactions) (0 assignees)JavaScript (3.497 forks)batch import
buggood first issuehelp welcomelanguage

Métricas do repositório

Stars
 (22.960 stars)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

Description

Describe the issue Integer literals in C++ may be written as 1'000'000'000 instead of 1000000000 for greater readability. When this is used inside a #define, if breaks highlighting which treats the rest of the code as being inside a string.

Which language seems to have the issue? cpp

Are you using highlight or highlightAuto? highlight

Sample Code to Reproduce

#include <iostream>
#define INF 1'000'000'000

int main() {
	int a = INF;
    return 0;
}

image

Expected behavior The token 1'000'000'000 should be highlighted as a number, and the following code should also be highlighted normally, instead of as if it is inside a string:

image

Additional context

The snippet below seems to be highlighted fine, so the issue is likely the interplay between quote-separated literals and defines.

#include <iostream>

int f(int x) { return f(2'000); }

int main() {
	int a = 1'000'000'000;
    int b = f(1'000);
    return 0;
}

Guia do colaborador