Skip to content

Commit 479434a

Browse files
committed
fix(dart): add class and function names highlighting
1 parent c49081a commit 479434a

File tree

5 files changed

+83
-0
lines changed

5 files changed

+83
-0
lines changed

src/languages/dart.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ Category: scripting
99

1010
/** @type LanguageFn */
1111
export default function(hljs) {
12+
13+
const regex = hljs.regex;
14+
1215
const SUBST = {
1316
className: 'subst',
1417
variants: [ { begin: '\\$[A-Za-z0-9_]+' } ]
@@ -221,6 +224,42 @@ export default function(hljs) {
221224
$pattern: /[A-Za-z][A-Za-z0-9_]*\??/
222225
};
223226

227+
const CAPITALIZED_BUILT_IN_TYPES = BUILT_IN_TYPES.filter(type => /^[A-Z]/.test(type));
228+
229+
const BUILT_IN_TYPES_REGEX = `\\b(${CAPITALIZED_BUILT_IN_TYPES.join('|')})\\b`;
230+
231+
const CLASS_NAME_RE = regex.either(
232+
/\b([A-Z]+[a-z0-9]+)+/,
233+
// ends in caps
234+
/\b([A-Z]+[a-z0-9]+)+[A-Z]+/,
235+
);
236+
237+
const CLASS_REFERENCE = {
238+
relevance: 0,
239+
variants: [
240+
{
241+
// prevent built-in types with capital letter from being selected as title.class
242+
match: BUILT_IN_TYPES_REGEX,
243+
skip: true
244+
},
245+
{
246+
match: CLASS_NAME_RE,
247+
scope: "title.class"
248+
}
249+
]
250+
};
251+
252+
const FUNCTION_REFERENCE = {
253+
relevance: 0,
254+
match: [
255+
/[a-z][A-Za-z0-9]*/,
256+
/\(/
257+
],
258+
className: {
259+
1: "title.function"
260+
},
261+
};
262+
224263
return {
225264
name: 'Dart',
226265
keywords: KEYWORDS,
@@ -257,6 +296,8 @@ export default function(hljs) {
257296
hljs.UNDERSCORE_TITLE_MODE
258297
]
259298
},
299+
CLASS_REFERENCE,
300+
FUNCTION_REFERENCE,
260301
NUMBER,
261302
{
262303
className: 'meta',

test/markup/dart/class.expect.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Person</span> </span>{
2+
<span class="hljs-built_in">String</span> name;
3+
<span class="hljs-built_in">int</span> age;
4+
5+
<span class="hljs-title class_">Person</span>(<span class="hljs-keyword">this</span>.name, <span class="hljs-keyword">this</span>.age);
6+
7+
<span class="hljs-keyword">void</span> <span class="hljs-title function_">introduce</span>() {
8+
<span class="hljs-title function_">print</span>(<span class="hljs-string">&#x27;My name is <span class="hljs-subst">$name</span> and I am <span class="hljs-subst">$age</span> years old.&#x27;</span>);
9+
}
10+
}

test/markup/dart/class.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Person {
2+
String name;
3+
int age;
4+
5+
Person(this.name, this.age);
6+
7+
void introduce() {
8+
print('My name is $name and I am $age years old.');
9+
}
10+
}

test/markup/dart/function.expect.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<span class="hljs-keyword">void</span> <span class="hljs-title function_">greet</span>(<span class="hljs-built_in">String</span> name) {
2+
<span class="hljs-title function_">print</span>(<span class="hljs-string">&#x27;Hello, <span class="hljs-subst">$name</span>!&#x27;</span>);
3+
}
4+
5+
<span class="hljs-keyword">void</span> <span class="hljs-title function_">dummy</span>(<span class="hljs-title class_">Foo</span> obj) {
6+
<span class="hljs-keyword">return</span> obj;
7+
}
8+
9+
<span class="hljs-built_in">int</span> <span class="hljs-title function_">add</span>(<span class="hljs-built_in">int</span> a, <span class="hljs-built_in">int</span> b) {
10+
<span class="hljs-keyword">return</span> a + b;
11+
}

test/markup/dart/function.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
void greet(String name) {
2+
print('Hello, $name!');
3+
}
4+
5+
void dummy(Foo obj) {
6+
return obj;
7+
}
8+
9+
int add(int a, int b) {
10+
return a + b;
11+
}

0 commit comments

Comments
 (0)