aboutsummaryrefslogtreecommitdiff
path: root/clang/unittests/Format/FormatTestJS.cpp
diff options
context:
space:
mode:
authorMartin Probst <martin@probst.io>2020-04-02 16:53:17 +0200
committerMartin Probst <martin@probst.io>2020-04-03 14:23:56 +0200
commit146d685cd657399a4698015f16cc5910cc828728 (patch)
tree45a3a5aee54c541759ae95e28bedc1e0ec3a89cc /clang/unittests/Format/FormatTestJS.cpp
parent0718e3ae31b02ebab38bfcff7af13ff876c16502 (diff)
downloadllvm-146d685cd657399a4698015f16cc5910cc828728.zip
llvm-146d685cd657399a4698015f16cc5910cc828728.tar.gz
llvm-146d685cd657399a4698015f16cc5910cc828728.tar.bz2
clang-format: [JS] detect C++ keywords.
Summary: C++ defines a number of keywords that are regular identifiers in JavaScript, e.g. `concept`: const concept = 1; // legit JS This change expands the existing `IsJavaScriptIdentifier(Tok)` function to return false for C++ keywords that aren't keywords in JS. Reviewers: krasimir Subscribers: jfb, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D77311
Diffstat (limited to 'clang/unittests/Format/FormatTestJS.cpp')
-rw-r--r--clang/unittests/Format/FormatTestJS.cpp62
1 files changed, 55 insertions, 7 deletions
diff --git a/clang/unittests/Format/FormatTestJS.cpp b/clang/unittests/Format/FormatTestJS.cpp
index 6efb866..3fd795c 100644
--- a/clang/unittests/Format/FormatTestJS.cpp
+++ b/clang/unittests/Format/FormatTestJS.cpp
@@ -386,13 +386,6 @@ TEST_F(FormatTestJS, ReservedWordsParenthesized) {
"return (x);\n");
}
-TEST_F(FormatTestJS, CppKeywords) {
- // Make sure we don't mess stuff up because of C++ keywords.
- verifyFormat("return operator && (aa);");
- // .. or QT ones.
- verifyFormat("slots: Slot[];");
-}
-
TEST_F(FormatTestJS, ES6DestructuringAssignment) {
verifyFormat("var [a, b, c] = [1, 2, 3];");
verifyFormat("const [a, b, c] = [1, 2, 3];");
@@ -2366,6 +2359,61 @@ TEST_F(FormatTestJS, NonNullAssertionOperator) {
verifyFormat("return !!x;\n");
}
+TEST_F(FormatTestJS, CppKeywords) {
+ // Make sure we don't mess stuff up because of C++ keywords.
+ verifyFormat("return operator && (aa);");
+ // .. or QT ones.
+ verifyFormat("const slots: Slot[];");
+ // use the "!" assertion operator to validate that clang-format understands
+ // these C++ keywords aren't keywords in JS/TS.
+ verifyFormat("auto!;");
+ verifyFormat("char!;");
+ verifyFormat("concept!;");
+ verifyFormat("double!;");
+ verifyFormat("extern!;");
+ verifyFormat("float!;");
+ verifyFormat("inline!;");
+ verifyFormat("int!;");
+ verifyFormat("long!;");
+ verifyFormat("register!;");
+ verifyFormat("restrict!;");
+ verifyFormat("sizeof!;");
+ verifyFormat("struct!;");
+ verifyFormat("typedef!;");
+ verifyFormat("union!;");
+ verifyFormat("unsigned!;");
+ verifyFormat("volatile!;");
+ verifyFormat("_Alignas!;");
+ verifyFormat("_Alignof!;");
+ verifyFormat("_Atomic!;");
+ verifyFormat("_Bool!;");
+ verifyFormat("_Complex!;");
+ verifyFormat("_Generic!;");
+ verifyFormat("_Imaginary!;");
+ verifyFormat("_Noreturn!;");
+ verifyFormat("_Static_assert!;");
+ verifyFormat("_Thread_local!;");
+ verifyFormat("__func__!;");
+ verifyFormat("__objc_yes!;");
+ verifyFormat("__objc_no!;");
+ verifyFormat("asm!;");
+ verifyFormat("bool!;");
+ verifyFormat("const_cast!;");
+ verifyFormat("dynamic_cast!;");
+ verifyFormat("explicit!;");
+ verifyFormat("friend!;");
+ verifyFormat("mutable!;");
+ verifyFormat("operator!;");
+ verifyFormat("reinterpret_cast!;");
+ verifyFormat("static_cast!;");
+ verifyFormat("template!;");
+ verifyFormat("typename!;");
+ verifyFormat("typeid!;");
+ verifyFormat("using!;");
+ verifyFormat("virtual!;");
+ verifyFormat("wchar_t!;");
+}
+
TEST_F(FormatTestJS, NullPropagatingOperator) {
verifyFormat("let x = foo?.bar?.baz();\n");
verifyFormat("let x = foo?.(foo);\n");