UNPKG

1.94 kBJavaScriptView Raw
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 // From JavaScript Prism keyword list and TypeScript language spec: https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#221-reserved-words
11 'keyword': /\b(?:abstract|as|asserts|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|undefined|var|void|while|with|yield)\b/,
12 'builtin': /\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/,
13 });
14
15 // doesn't work with TS because TS is too complex
16 delete Prism.languages.typescript['parameter'];
17
18 // a version of typescript specifically for highlighting types
19 var typeInside = Prism.languages.extend('typescript', {});
20 delete typeInside['class-name'];
21
22 Prism.languages.typescript['class-name'].inside = typeInside;
23
24 Prism.languages.insertBefore('typescript', 'function', {
25 'generic-function': {
26 // e.g. foo<T extends "bar" | "baz">( ...
27 pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,
28 greedy: true,
29 inside: {
30 'function': /^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,
31 'generic': {
32 pattern: /<[\s\S]+/, // everything after the first <
33 alias: 'class-name',
34 inside: typeInside
35 }
36 }
37 }
38 });
39
40 Prism.languages.ts = Prism.languages.typescript;
41
42}(Prism));