1- import { insertBefore } from '../util/language-util.js' ;
21import javadoclike from './javadoclike.js' ;
32import javascript from './javascript.js' ;
43import typescript from './typescript.js' ;
@@ -8,85 +7,88 @@ export default {
87 id : 'jsdoc' ,
98 base : javadoclike ,
109 require : [ javascript , typescript ] ,
11- grammar ( { base , languages } ) {
10+ grammar ( { languages } ) {
1211 const { javascript, typescript } = languages ;
1312
1413 const type = / \{ (?: [ ^ { } ] | \{ (?: [ ^ { } ] | \{ [ ^ { } ] * \} ) * \} ) + \} / . source ;
1514 const parameterPrefix = '(@(?:arg|argument|param|property)\\s+(?:' + type + '\\s+)?)' ;
1615
17- insertBefore ( base , 'keyword' , {
18- 'optional-parameter' : {
19- // @param {string } [baz.foo="bar"] foo bar
20- pattern : RegExp (
21- parameterPrefix + / \[ (?: (? ! \s ) [ $ \w \xA0 - \uFFFF . ] ) + (?: = [ ^ [ \] ] + ) ? \] (? = \s | $ ) / . source
22- ) ,
16+ return {
17+ 'parameter' : {
18+ // @param {string } foo - foo bar
19+ pattern : RegExp ( parameterPrefix + / (?: (? ! \s ) [ $ \w \xA0 - \uFFFF . ] ) + (? = \s | $ ) / . source ) ,
2320 lookbehind : true ,
2421 inside : {
25- 'parameter' : {
26- pattern : / ( ^ \[ ) [ $ \w \xA0 - \uFFFF \. ] + / ,
22+ 'punctuation' : / \. / ,
23+ } ,
24+ } ,
25+ $insertBefore : {
26+ 'keyword' : {
27+ 'optional-parameter' : {
28+ // @param {string } [baz.foo="bar"] foo bar
29+ pattern : RegExp (
30+ parameterPrefix +
31+ / \[ (?: (? ! \s ) [ $ \w \xA0 - \uFFFF . ] ) + (?: = [ ^ [ \] ] + ) ? \] (? = \s | $ ) / . source
32+ ) ,
2733 lookbehind : true ,
2834 inside : {
29- 'punctuation' : / \. / ,
35+ 'parameter' : {
36+ pattern : / ( ^ \[ ) [ $ \w \xA0 - \uFFFF \. ] + / ,
37+ lookbehind : true ,
38+ inside : {
39+ 'punctuation' : / \. / ,
40+ } ,
41+ } ,
42+ 'code' : {
43+ pattern : / ( = ) [ \s \S ] * (? = \] $ ) / ,
44+ lookbehind : true ,
45+ alias : 'language-javascript' ,
46+ inside : 'javascript' ,
47+ } ,
48+ 'punctuation' : / [ = [ \] ] / ,
3049 } ,
3150 } ,
32- 'code' : {
33- pattern : / ( = ) [ \s \S ] * (? = \] $ ) / ,
34- lookbehind : true ,
35- alias : 'language-javascript' ,
36- inside : 'javascript' ,
37- } ,
38- 'punctuation' : / [ = [ \] ] / ,
39- } ,
40- } ,
41- 'class-name' : [
42- {
43- pattern : RegExp (
44- / ( @ (?: a u g m e n t s | c l a s s | e x t e n d s | i n t e r f a c e | m e m b e r o f ! ? | t e m p l a t e | t h i s | t y p e d e f ) \s + (?: < T Y P E > \s + ) ? ) [ A - Z ] \w * (?: \. [ A - Z ] \w * ) * / . source . replace (
45- / < T Y P E > / g,
46- ( ) => type
47- )
48- ) ,
49- lookbehind : true ,
50- inside : {
51- 'punctuation' : / \. / ,
52- } ,
53- } ,
54- {
55- pattern : RegExp ( '(@[a-z]+\\s+)' + type ) ,
56- lookbehind : true ,
57- inside : {
58- 'string' : javascript . string ,
59- 'number' : javascript . number ,
60- 'boolean' : javascript . boolean ,
61- 'keyword' : typescript . keyword ,
62- 'operator' : / = > | \. \. \. | [ & | ? : * ] / ,
63- 'punctuation' : / [ . , ; = < > { } ( ) [ \] ] / ,
64- } ,
65- } ,
66- ] ,
67- 'example' : {
68- pattern : / ( @ e x a m p l e \s + (? ! \s ) ) (?: [ ^ @ \s ] | \s + (? ! \s ) ) + ?(? = \s * (?: \* \s * ) ? (?: @ \w | \* \/ ) ) / ,
69- lookbehind : true ,
70- inside : {
71- 'code' : {
72- pattern : / ^ ( [ \t ] * (?: \* \s * ) ? ) \S .* $ / m,
51+ 'class-name' : [
52+ {
53+ pattern : RegExp (
54+ / ( @ (?: a u g m e n t s | c l a s s | e x t e n d s | i n t e r f a c e | m e m b e r o f ! ? | t e m p l a t e | t h i s | t y p e d e f ) \s + (?: < T Y P E > \s + ) ? ) [ A - Z ] \w * (?: \. [ A - Z ] \w * ) * / . source . replace (
55+ / < T Y P E > / g,
56+ ( ) => type
57+ )
58+ ) ,
59+ lookbehind : true ,
60+ inside : {
61+ 'punctuation' : / \. / ,
62+ } ,
63+ } ,
64+ {
65+ pattern : RegExp ( '(@[a-z]+\\s+)' + type ) ,
66+ lookbehind : true ,
67+ inside : {
68+ 'string' : javascript . string ,
69+ 'number' : javascript . number ,
70+ 'boolean' : javascript . boolean ,
71+ 'keyword' : typescript . keyword ,
72+ 'operator' : / = > | \. \. \. | [ & | ? : * ] / ,
73+ 'punctuation' : / [ . , ; = < > { } ( ) [ \] ] / ,
74+ } ,
75+ } ,
76+ ] ,
77+ 'example' : {
78+ pattern :
79+ / ( @ e x a m p l e \s + (? ! \s ) ) (?: [ ^ @ \s ] | \s + (? ! \s ) ) + ?(? = \s * (?: \* \s * ) ? (?: @ \w | \* \/ ) ) / ,
7380 lookbehind : true ,
74- alias : 'language-javascript' ,
75- inside : 'javascript' ,
81+ inside : {
82+ 'code' : {
83+ pattern : / ^ ( [ \t ] * (?: \* \s * ) ? ) \S .* $ / m,
84+ lookbehind : true ,
85+ alias : 'language-javascript' ,
86+ inside : 'javascript' ,
87+ } ,
88+ } ,
7689 } ,
7790 } ,
7891 } ,
79- } ) ;
80-
81- return {
82- 'parameter' : {
83- // @param {string } foo - foo bar
84- pattern : RegExp ( parameterPrefix + / (?: (? ! \s ) [ $ \w \xA0 - \uFFFF . ] ) + (? = \s | $ ) / . source ) ,
85- lookbehind : true ,
86- inside : {
87- 'punctuation' : / \. / ,
88- } ,
89- } ,
9092 } ;
9193 } ,
9294} ;
0 commit comments