diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b8f8783555..2178f6ed15 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -20,5 +20,7 @@ This is a {{ site.pmd.release_type }} release. ### External Contributions +* [#1803](https://github.com/pmd/pmd/pull/1803): \[dart] \[cpd] Dart escape sequences - [Maikel Steneker](https://github.com/maikelsteneker) + {% endtocmaker %} diff --git a/pmd-dart/src/main/antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 b/pmd-dart/src/main/antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 index aae6073e6a..fcc42ae013 100644 --- a/pmd-dart/src/main/antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 +++ b/pmd-dart/src/main/antlr4/net/sourceforge/pmd/lang/dart/antlr4/Dart2.g4 @@ -344,8 +344,8 @@ booleanLiteral stringLiteral: SingleLineString; //stringLiteral: SingleLineString; SingleLineString - : '"' (~["] | '\\"')* '"' - | '\'' (~['] | '\\\'')* '\'' + : '"' (~[\\"] | '\\\\' | ESCAPE_SEQUENCE | '\\"')* '"' + | '\'' (~[\\'] | '\\\\' | ESCAPE_SEQUENCE | '\\\'')* '\'' // | 'r\'' (~('\'' | NEWLINE))* '\'' // TODO // | 'r"' (~('\'' | NEWLINE))* '"' ; @@ -369,6 +369,7 @@ ESCAPE_SEQUENCE | '\\x' HEX_DIGIT HEX_DIGIT | '\\u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT | '\\u{' HEX_DIGIT_SEQUENCE '}' + | '\\$' ; fragment HEX_DIGIT_SEQUENCE diff --git a/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java b/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java index 919001cd09..373444edfa 100644 --- a/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java +++ b/pmd-dart/src/test/java/net/sourceforge/pmd/cpd/DartTokenizerTest.java @@ -31,6 +31,8 @@ public class DartTokenizerTest extends AbstractTokenizerTest { public static Collection data() { return Arrays.asList( new Object[] { "comment.dart", 5 }, + new Object[] { "escape_sequences.dart", 13 }, + new Object[] { "escaped_backslash.dart", 14 }, new Object[] { "escaped_string.dart", 17 }, new Object[] { "increment.dart", 185 }, new Object[] { "imports.dart", 1 } diff --git a/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escape_sequences.dart b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escape_sequences.dart new file mode 100644 index 0000000000..7d70500426 --- /dev/null +++ b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escape_sequences.dart @@ -0,0 +1,3 @@ +var newline = '\n'; +var dollar = '$'; +var escaped_dollar = "\$"; \ No newline at end of file diff --git a/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escaped_backslash.dart b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escaped_backslash.dart new file mode 100644 index 0000000000..ee9c4a6419 --- /dev/null +++ b/pmd-dart/src/test/resources/net/sourceforge/pmd/cpd/escaped_backslash.dart @@ -0,0 +1,2 @@ +var separator = '\\'; +var separators = const ['/', '\\']; \ No newline at end of file