From 479434ac0a1db831454bf58a359559982dc10fa3 Mon Sep 17 00:00:00 2001 From: Tommaso Paulon Date: Tue, 12 Nov 2024 20:59:23 +0000 Subject: [PATCH 1/4] fix(dart): add class and function names highlighting --- src/languages/dart.js | 41 ++++++++++++++++++++++++++++ test/markup/dart/class.expect.txt | 10 +++++++ test/markup/dart/class.txt | 10 +++++++ test/markup/dart/function.expect.txt | 11 ++++++++ test/markup/dart/function.txt | 11 ++++++++ 5 files changed, 83 insertions(+) create mode 100644 test/markup/dart/class.expect.txt create mode 100644 test/markup/dart/class.txt create mode 100644 test/markup/dart/function.expect.txt create mode 100644 test/markup/dart/function.txt diff --git a/src/languages/dart.js b/src/languages/dart.js index 32e4b43b2a..055693fc19 100644 --- a/src/languages/dart.js +++ b/src/languages/dart.js @@ -9,6 +9,9 @@ Category: scripting /** @type LanguageFn */ export default function(hljs) { + + const regex = hljs.regex; + const SUBST = { className: 'subst', variants: [ { begin: '\\$[A-Za-z0-9_]+' } ] @@ -221,6 +224,42 @@ export default function(hljs) { $pattern: /[A-Za-z][A-Za-z0-9_]*\??/ }; + const CAPITALIZED_BUILT_IN_TYPES = BUILT_IN_TYPES.filter(type => /^[A-Z]/.test(type)); + + const BUILT_IN_TYPES_REGEX = `\\b(${CAPITALIZED_BUILT_IN_TYPES.join('|')})\\b`; + + const CLASS_NAME_RE = regex.either( + /\b([A-Z]+[a-z0-9]+)+/, + // ends in caps + /\b([A-Z]+[a-z0-9]+)+[A-Z]+/, + ); + + const CLASS_REFERENCE = { + relevance: 0, + variants: [ + { + // prevent built-in types with capital letter from being selected as title.class + match: BUILT_IN_TYPES_REGEX, + skip: true + }, + { + match: CLASS_NAME_RE, + scope: "title.class" + } + ] + }; + + const FUNCTION_REFERENCE = { + relevance: 0, + match: [ + /[a-z][A-Za-z0-9]*/, + /\(/ + ], + className: { + 1: "title.function" + }, + }; + return { name: 'Dart', keywords: KEYWORDS, @@ -257,6 +296,8 @@ export default function(hljs) { hljs.UNDERSCORE_TITLE_MODE ] }, + CLASS_REFERENCE, + FUNCTION_REFERENCE, NUMBER, { className: 'meta', diff --git a/test/markup/dart/class.expect.txt b/test/markup/dart/class.expect.txt new file mode 100644 index 0000000000..8df307457b --- /dev/null +++ b/test/markup/dart/class.expect.txt @@ -0,0 +1,10 @@ +class Person { + String name; + int age; + + Person(this.name, this.age); + + void introduce() { + print('My name is $name and I am $age years old.'); + } +} \ No newline at end of file diff --git a/test/markup/dart/class.txt b/test/markup/dart/class.txt new file mode 100644 index 0000000000..7de4dff9fb --- /dev/null +++ b/test/markup/dart/class.txt @@ -0,0 +1,10 @@ +class Person { + String name; + int age; + + Person(this.name, this.age); + + void introduce() { + print('My name is $name and I am $age years old.'); + } +} \ No newline at end of file diff --git a/test/markup/dart/function.expect.txt b/test/markup/dart/function.expect.txt new file mode 100644 index 0000000000..3168badeda --- /dev/null +++ b/test/markup/dart/function.expect.txt @@ -0,0 +1,11 @@ +void greet(String name) { + print('Hello, $name!'); +} + +void dummy(Foo obj) { + return obj; +} + +int add(int a, int b) { + return a + b; +} \ No newline at end of file diff --git a/test/markup/dart/function.txt b/test/markup/dart/function.txt new file mode 100644 index 0000000000..1ce5f9dd8a --- /dev/null +++ b/test/markup/dart/function.txt @@ -0,0 +1,11 @@ +void greet(String name) { + print('Hello, $name!'); +} + +void dummy(Foo obj) { + return obj; +} + +int add(int a, int b) { + return a + b; +} \ No newline at end of file From ed3b9361cfd05d5155c1be926d7a8cbd3d5f29be Mon Sep 17 00:00:00 2001 From: Tommaso Paulon Date: Tue, 12 Nov 2024 21:04:52 +0000 Subject: [PATCH 2/4] update change log --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 2bf84d527f..d45d63d1f1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -40,6 +40,7 @@ Core Grammars: - fix(nix) don't mix escapes for `"` and `''` strings [h7x4][] - fix(swift) - Fixed syntax highlighting for class func/var declarations [guuido] - fix(yaml) - Fixed wrong escaping behavior in single quoted strings [guuido] +- fix(dart) - Added highlighting for class and function names [guuido] New Grammars: From c726e933f5555473ab4f0c7ca776cc39b128afc5 Mon Sep 17 00:00:00 2001 From: Tommaso Paulon Date: Wed, 13 Nov 2024 11:08:20 +0000 Subject: [PATCH 3/4] fix(dart): remove multi-matcher from FUNCTION_REFERENCE --- src/languages/dart.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/languages/dart.js b/src/languages/dart.js index 055693fc19..a6ab196336 100644 --- a/src/languages/dart.js +++ b/src/languages/dart.js @@ -251,13 +251,8 @@ export default function(hljs) { const FUNCTION_REFERENCE = { relevance: 0, - match: [ - /[a-z][A-Za-z0-9]*/, - /\(/ - ], - className: { - 1: "title.function" - }, + match: /[a-z][A-Za-z0-9]*(?=\()/, + className: "title.function", }; return { From ea46b1f927b96c2f42edb34bd192346e8697b64c Mon Sep 17 00:00:00 2001 From: Tommaso Paulon Date: Mon, 18 Nov 2024 10:50:10 +0000 Subject: [PATCH 4/4] (dart) add title.class scope to built-in classes --- src/languages/dart.js | 9 --------- test/markup/dart/class.expect.txt | 2 +- test/markup/dart/function.expect.txt | 2 +- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/src/languages/dart.js b/src/languages/dart.js index a6ab196336..027cffffca 100644 --- a/src/languages/dart.js +++ b/src/languages/dart.js @@ -224,10 +224,6 @@ export default function(hljs) { $pattern: /[A-Za-z][A-Za-z0-9_]*\??/ }; - const CAPITALIZED_BUILT_IN_TYPES = BUILT_IN_TYPES.filter(type => /^[A-Z]/.test(type)); - - const BUILT_IN_TYPES_REGEX = `\\b(${CAPITALIZED_BUILT_IN_TYPES.join('|')})\\b`; - const CLASS_NAME_RE = regex.either( /\b([A-Z]+[a-z0-9]+)+/, // ends in caps @@ -237,11 +233,6 @@ export default function(hljs) { const CLASS_REFERENCE = { relevance: 0, variants: [ - { - // prevent built-in types with capital letter from being selected as title.class - match: BUILT_IN_TYPES_REGEX, - skip: true - }, { match: CLASS_NAME_RE, scope: "title.class" diff --git a/test/markup/dart/class.expect.txt b/test/markup/dart/class.expect.txt index 8df307457b..42f65cf132 100644 --- a/test/markup/dart/class.expect.txt +++ b/test/markup/dart/class.expect.txt @@ -1,5 +1,5 @@ class Person { - String name; + String name; int age; Person(this.name, this.age); diff --git a/test/markup/dart/function.expect.txt b/test/markup/dart/function.expect.txt index 3168badeda..f5e62e17f9 100644 --- a/test/markup/dart/function.expect.txt +++ b/test/markup/dart/function.expect.txt @@ -1,4 +1,4 @@ -void greet(String name) { +void greet(String name) { print('Hello, $name!'); }