diff --git a/Utilities/ast-grep/rule-tests/__snapshots__/cmhasliteralprefix-char-snapshot.yml b/Utilities/ast-grep/rule-tests/__snapshots__/cmhasliteralprefix-char-snapshot.yml new file mode 100644 index 0000000000..4739ca53be --- /dev/null +++ b/Utilities/ast-grep/rule-tests/__snapshots__/cmhasliteralprefix-char-snapshot.yml @@ -0,0 +1,23 @@ +id: cmhasliteralprefix-char +snapshots: + cmHasLiteralPrefix(haystack, "'"): + fixed: cmHasPrefix(haystack, '\'') + labels: + - source: cmHasLiteralPrefix(haystack, "'") + style: primary + start: 0 + end: 33 + cmHasLiteralPrefix(haystack, "\n"): + fixed: cmHasPrefix(haystack, '\n') + labels: + - source: cmHasLiteralPrefix(haystack, "\n") + style: primary + start: 0 + end: 34 + cmHasLiteralPrefix(haystack, "a"): + fixed: cmHasPrefix(haystack, 'a') + labels: + - source: cmHasLiteralPrefix(haystack, "a") + style: primary + start: 0 + end: 33 diff --git a/Utilities/ast-grep/rule-tests/__snapshots__/cmhasliteralsuffix-char-snapshot.yml b/Utilities/ast-grep/rule-tests/__snapshots__/cmhasliteralsuffix-char-snapshot.yml new file mode 100644 index 0000000000..d77881da58 --- /dev/null +++ b/Utilities/ast-grep/rule-tests/__snapshots__/cmhasliteralsuffix-char-snapshot.yml @@ -0,0 +1,23 @@ +id: cmhasliteralsuffix-char +snapshots: + cmHasLiteralSuffix(haystack, "'"): + fixed: cmHasSuffix(haystack, '\'') + labels: + - source: cmHasLiteralSuffix(haystack, "'") + style: primary + start: 0 + end: 33 + cmHasLiteralSuffix(haystack, "\n"): + fixed: cmHasSuffix(haystack, '\n') + labels: + - source: cmHasLiteralSuffix(haystack, "\n") + style: primary + start: 0 + end: 34 + cmHasLiteralSuffix(haystack, "a"): + fixed: cmHasSuffix(haystack, 'a') + labels: + - source: cmHasLiteralSuffix(haystack, "a") + style: primary + start: 0 + end: 33 diff --git a/Utilities/ast-grep/rule-tests/cmhasliteralprefix-char.yml b/Utilities/ast-grep/rule-tests/cmhasliteralprefix-char.yml new file mode 100644 index 0000000000..4254481d29 --- /dev/null +++ b/Utilities/ast-grep/rule-tests/cmhasliteralprefix-char.yml @@ -0,0 +1,8 @@ +--- +id: cmhasliteralprefix-char +valid: + - 'cmHasLiteralPrefix(haystack, "foo")' +invalid: + - 'cmHasLiteralPrefix(haystack, "a")' + - 'cmHasLiteralPrefix(haystack, "\n")' + - "cmHasLiteralPrefix(haystack, \"'\")" diff --git a/Utilities/ast-grep/rule-tests/cmhasliteralsuffix-char.yml b/Utilities/ast-grep/rule-tests/cmhasliteralsuffix-char.yml new file mode 100644 index 0000000000..03f065024e --- /dev/null +++ b/Utilities/ast-grep/rule-tests/cmhasliteralsuffix-char.yml @@ -0,0 +1,8 @@ +--- +id: cmhasliteralsuffix-char +valid: + - 'cmHasLiteralSuffix(haystack, "foo")' +invalid: + - 'cmHasLiteralSuffix(haystack, "a")' + - 'cmHasLiteralSuffix(haystack, "\n")' + - "cmHasLiteralSuffix(haystack, \"'\")" diff --git a/Utilities/ast-grep/rules/cmhasliteralprefix-char.yml b/Utilities/ast-grep/rules/cmhasliteralprefix-char.yml new file mode 100644 index 0000000000..99f178f2b4 --- /dev/null +++ b/Utilities/ast-grep/rules/cmhasliteralprefix-char.yml @@ -0,0 +1,27 @@ +--- +id: cmhasliteralprefix-char +language: Cpp +severity: warning +message: "`cmHasLiteralPrefix` with a one-char prefix search should use `cmHasPrefix`" +rule: + pattern: cmHasLiteralPrefix($HAYSTACK, $NEEDLE) +constraints: + NEEDLE: + regex: '^"(.|\\.)"$' +transform: + NEEDLE_CHANGE_QUOTE: + replace: + source: $NEEDLE + replace: '(^"|"$)' + by: "'" + NEEDLE_ESCAPE_SINGLE_QUOTE: + replace: + source: $NEEDLE_CHANGE_QUOTE + replace: "'''" + by: "'\\''" + NEEDLE_OUT: + replace: + source: $NEEDLE_ESCAPE_SINGLE_QUOTE + replace: '\\"' + by: '"' +fix: cmHasPrefix($HAYSTACK, $NEEDLE_OUT) diff --git a/Utilities/ast-grep/rules/cmhasliteralsuffix-char.yml b/Utilities/ast-grep/rules/cmhasliteralsuffix-char.yml new file mode 100644 index 0000000000..ee3f035448 --- /dev/null +++ b/Utilities/ast-grep/rules/cmhasliteralsuffix-char.yml @@ -0,0 +1,27 @@ +--- +id: cmhasliteralsuffix-char +language: Cpp +severity: warning +message: "`cmHasLiteralSuffix` with a one-char suffix search should use `cmHasSuffix`" +rule: + pattern: cmHasLiteralSuffix($HAYSTACK, $NEEDLE) +constraints: + NEEDLE: + regex: '^"(.|\\.)"$' +transform: + NEEDLE_CHANGE_QUOTE: + replace: + source: $NEEDLE + replace: '(^"|"$)' + by: "'" + NEEDLE_ESCAPE_SINGLE_QUOTE: + replace: + source: $NEEDLE_CHANGE_QUOTE + replace: "'''" + by: "'\\''" + NEEDLE_OUT: + replace: + source: $NEEDLE_ESCAPE_SINGLE_QUOTE + replace: '\\"' + by: '"' +fix: cmHasSuffix($HAYSTACK, $NEEDLE_OUT)