highlightjs/highlight.js

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

Open

#3,928 opened on Nov 19, 2023

View on GitHub
 (11 comments) (0 reactions) (0 assignees)JavaScript (22,960 stars) (3,497 forks)batch import
buggood first issuehelp welcomelanguage

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;
}

Contributor guide

(C++) Integer literals with quote delimiters in #defines break highlighting · highlightjs/highlight.js#3928 | Good First Issue