1 | (function (Prism) {
|
---|
2 |
|
---|
3 | Prism.languages.typescript = Prism.languages.extend('javascript', {
|
---|
4 | 'class-name': {
|
---|
5 | pattern: /(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,
|
---|
6 | lookbehind: true,
|
---|
7 | greedy: true,
|
---|
8 | inside: null // see below
|
---|
9 | },
|
---|
10 | 'builtin': /\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/,
|
---|
11 | });
|
---|
12 |
|
---|
13 | // The keywords TypeScript adds to JavaScript
|
---|
14 | Prism.languages.typescript.keyword.push(
|
---|
15 | /\b(?:abstract|declare|is|keyof|readonly|require)\b/,
|
---|
16 | // keywords that have to be followed by an identifier
|
---|
17 | /\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,
|
---|
18 | // This is for `import type *, {}`
|
---|
19 | /\btype\b(?=\s*(?:[\{*]|$))/
|
---|
20 | );
|
---|
21 |
|
---|
22 | // doesn't work with TS because TS is too complex
|
---|
23 | delete Prism.languages.typescript['parameter'];
|
---|
24 | delete Prism.languages.typescript['literal-property'];
|
---|
25 |
|
---|
26 | // a version of typescript specifically for highlighting types
|
---|
27 | var typeInside = Prism.languages.extend('typescript', {});
|
---|
28 | delete typeInside['class-name'];
|
---|
29 |
|
---|
30 | Prism.languages.typescript['class-name'].inside = typeInside;
|
---|
31 |
|
---|
32 | Prism.languages.insertBefore('typescript', 'function', {
|
---|
33 | 'decorator': {
|
---|
34 | pattern: /@[$\w\xA0-\uFFFF]+/,
|
---|
35 | inside: {
|
---|
36 | 'at': {
|
---|
37 | pattern: /^@/,
|
---|
38 | alias: 'operator'
|
---|
39 | },
|
---|
40 | 'function': /^[\s\S]+/
|
---|
41 | }
|
---|
42 | },
|
---|
43 | 'generic-function': {
|
---|
44 | // e.g. foo<T extends "bar" | "baz">( ...
|
---|
45 | pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,
|
---|
46 | greedy: true,
|
---|
47 | inside: {
|
---|
48 | 'function': /^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,
|
---|
49 | 'generic': {
|
---|
50 | pattern: /<[\s\S]+/, // everything after the first <
|
---|
51 | alias: 'class-name',
|
---|
52 | inside: typeInside
|
---|
53 | }
|
---|
54 | }
|
---|
55 | }
|
---|
56 | });
|
---|
57 |
|
---|
58 | Prism.languages.ts = Prism.languages.typescript;
|
---|
59 |
|
---|
60 | }(Prism));
|
---|