1- describe " JSDoc" , ->
1+ describe " JSDoc grammar " , ->
22 grammar = null
33
44 beforeEach ->
@@ -8,23 +8,6 @@ describe "JSDoc", ->
88 runs ->
99 grammar = atom .grammars .grammarForScopeName (" source.js" )
1010
11- it " tokenises simple tags" , ->
12- {tokens } = grammar .tokenizeLine (' /** @mixins */' )
13- expect (tokens[0 ]).toEqual value : ' /**' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.begin.comment.js' ]
14- expect (tokens[2 ]).toEqual value : ' @' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' , ' punctuation.definition.block.tag.jsdoc' ]
15- expect (tokens[3 ]).toEqual value : ' mixins' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' ]
16- expect (tokens[4 ]).toEqual value : ' ' , scopes : [' source.js' , ' comment.block.documentation.js' ]
17- expect (tokens[5 ]).toEqual value : ' */' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.end.comment.js' ]
18-
19- {tokens } = grammar .tokenizeLine (' /** @global @static */' )
20- expect (tokens[0 ]).toEqual value : ' /**' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.begin.comment.js' ]
21- expect (tokens[2 ]).toEqual value : ' @' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' , ' punctuation.definition.block.tag.jsdoc' ]
22- expect (tokens[3 ]).toEqual value : ' global' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' ]
23- expect (tokens[4 ]).toEqual value : ' ' , scopes : [' source.js' , ' comment.block.documentation.js' ]
24- expect (tokens[5 ]).toEqual value : ' @' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' , ' punctuation.definition.block.tag.jsdoc' ]
25- expect (tokens[6 ]).toEqual value : ' static' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' ]
26- expect (tokens[7 ]).toEqual value : ' ' , scopes : [' source.js' , ' comment.block.documentation.js' ]
27- expect (tokens[8 ]).toEqual value : ' */' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.end.comment.js' ]
2811
2912 describe " inline tags" , ->
3013 it " tokenises tags without descriptions" , ->
@@ -132,6 +115,24 @@ describe "JSDoc", ->
132115 expect (tokens[19 ]).toEqual value : ' */' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.end.comment.js' ]
133116
134117 describe " block tags" , ->
118+ it " tokenises simple tags" , ->
119+ {tokens } = grammar .tokenizeLine (' /** @mixins */' )
120+ expect (tokens[0 ]).toEqual value : ' /**' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.begin.comment.js' ]
121+ expect (tokens[2 ]).toEqual value : ' @' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' , ' punctuation.definition.block.tag.jsdoc' ]
122+ expect (tokens[3 ]).toEqual value : ' mixins' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' ]
123+ expect (tokens[4 ]).toEqual value : ' ' , scopes : [' source.js' , ' comment.block.documentation.js' ]
124+ expect (tokens[5 ]).toEqual value : ' */' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.end.comment.js' ]
125+
126+ {tokens } = grammar .tokenizeLine (' /** @global @static */' )
127+ expect (tokens[0 ]).toEqual value : ' /**' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.begin.comment.js' ]
128+ expect (tokens[2 ]).toEqual value : ' @' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' , ' punctuation.definition.block.tag.jsdoc' ]
129+ expect (tokens[3 ]).toEqual value : ' global' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' ]
130+ expect (tokens[4 ]).toEqual value : ' ' , scopes : [' source.js' , ' comment.block.documentation.js' ]
131+ expect (tokens[5 ]).toEqual value : ' @' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' , ' punctuation.definition.block.tag.jsdoc' ]
132+ expect (tokens[6 ]).toEqual value : ' static' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' ]
133+ expect (tokens[7 ]).toEqual value : ' ' , scopes : [' source.js' , ' comment.block.documentation.js' ]
134+ expect (tokens[8 ]).toEqual value : ' */' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.end.comment.js' ]
135+
135136 it " tokenises tags with type expressions" , ->
136137 {tokens } = grammar .tokenizeLine (' /** @const {object} */' )
137138 expect (tokens[0 ]).toEqual value : ' /**' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.begin.comment.js' ]
@@ -1018,3 +1019,48 @@ describe "JSDoc", ->
10181019 expect (tokens[5 ]).toEqual value : ' {' , scopes : [' source.js' , ' comment.block.documentation.js' , ' entity.name.type.instance.jsdoc' , ' punctuation.definition.bracket.curly.begin.jsdoc' ]
10191020 expect (tokens[6 ]).toEqual value : ' function(string) : number' , scopes : [' source.js' , ' comment.block.documentation.js' , ' entity.name.type.instance.jsdoc' ]
10201021 expect (tokens[7 ]).toEqual value : ' }' , scopes : [' source.js' , ' comment.block.documentation.js' , ' entity.name.type.instance.jsdoc' , ' punctuation.definition.bracket.curly.end.jsdoc' ]
1022+
1023+ describe " when the containing comment ends unexpectedly" , ->
1024+ it " terminates any unclosed tags" , ->
1025+ {tokens } = grammar .tokenizeLine (' /** @param {String */ aa' )
1026+ expect (tokens[0 ]).toEqual value : ' /**' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.begin.comment.js' ]
1027+ expect (tokens[2 ]).toEqual value : ' @' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' , ' punctuation.definition.block.tag.jsdoc' ]
1028+ expect (tokens[3 ]).toEqual value : ' param' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' ]
1029+ expect (tokens[5 ]).toEqual value : ' {' , scopes : [' source.js' , ' comment.block.documentation.js' , ' entity.name.type.instance.jsdoc' , ' punctuation.definition.bracket.curly.begin.jsdoc' ]
1030+ expect (tokens[6 ]).toEqual value : ' String ' , scopes : [' source.js' , ' comment.block.documentation.js' , ' entity.name.type.instance.jsdoc' ]
1031+ expect (tokens[7 ]).toEqual value : ' */' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.end.comment.js' ]
1032+ expect (tokens[8 ]).toEqual value : ' aa' , scopes : [' source.js' ]
1033+
1034+ {tokens } = grammar .tokenizeLine (' /** @param {*} [name={value: {a:[{*/}}]}] */' )
1035+ expect (tokens[0 ]).toEqual value : ' /**' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.begin.comment.js' ]
1036+ expect (tokens[2 ]).toEqual value : ' @' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' , ' punctuation.definition.block.tag.jsdoc' ]
1037+ expect (tokens[3 ]).toEqual value : ' param' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' ]
1038+ expect (tokens[5 ]).toEqual value : ' {' , scopes : [' source.js' , ' comment.block.documentation.js' , ' entity.name.type.instance.jsdoc' , ' punctuation.definition.bracket.curly.begin.jsdoc' ]
1039+ expect (tokens[6 ]).toEqual value : ' *' , scopes : [' source.js' , ' comment.block.documentation.js' , ' entity.name.type.instance.jsdoc' ]
1040+ expect (tokens[7 ]).toEqual value : ' }' , scopes : [' source.js' , ' comment.block.documentation.js' , ' entity.name.type.instance.jsdoc' , ' punctuation.definition.bracket.curly.end.jsdoc' ]
1041+ expect (tokens[9 ]).toEqual value : ' [' , scopes : [' source.js' , ' comment.block.documentation.js' , ' variable.other.jsdoc' ]
1042+ expect (tokens[10 ]).toEqual value : ' name=' , scopes : [' source.js' , ' comment.block.documentation.js' , ' variable.other.jsdoc' ]
1043+ expect (tokens[11 ]).toEqual value : ' {' , scopes : [' source.js' , ' comment.block.documentation.js' , ' variable.other.jsdoc' ]
1044+ expect (tokens[12 ]).toEqual value : ' value: ' , scopes : [' source.js' , ' comment.block.documentation.js' , ' variable.other.jsdoc' ]
1045+ expect (tokens[13 ]).toEqual value : ' {' , scopes : [' source.js' , ' comment.block.documentation.js' , ' variable.other.jsdoc' ]
1046+ expect (tokens[14 ]).toEqual value : ' a:' , scopes : [' source.js' , ' comment.block.documentation.js' , ' variable.other.jsdoc' ]
1047+ expect (tokens[15 ]).toEqual value : ' [' , scopes : [' source.js' , ' comment.block.documentation.js' , ' variable.other.jsdoc' ]
1048+ expect (tokens[16 ]).toEqual value : ' {' , scopes : [' source.js' , ' comment.block.documentation.js' , ' variable.other.jsdoc' ]
1049+ expect (tokens[17 ]).toEqual value : ' */' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.end.comment.js' ]
1050+ expect (tokens[18 ]).toEqual value : ' }}' , scopes : [' source.js' ]
1051+ expect (tokens[19 ]).toEqual value : ' ]' , scopes : [' source.js' , ' meta.brace.square.js' ]
1052+ expect (tokens[20 ]).toEqual value : ' }' , scopes : [' source.js' ]
1053+ expect (tokens[21 ]).toEqual value : ' ]' , scopes : [' source.js' , ' meta.brace.square.js' ]
1054+ expect (tokens[23 ]).toEqual value : ' *' , scopes : [' source.js' , ' keyword.operator.js' ]
1055+ expect (tokens[24 ]).toEqual value : ' /' , scopes : [' source.js' , ' keyword.operator.js' ]
1056+
1057+ {tokens } = grammar .tokenizeLine (' /** @param {string="Foo*/oo"} bar' )
1058+ expect (tokens[0 ]).toEqual value : ' /**' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.begin.comment.js' ]
1059+ expect (tokens[2 ]).toEqual value : ' @' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' , ' punctuation.definition.block.tag.jsdoc' ]
1060+ expect (tokens[3 ]).toEqual value : ' param' , scopes : [' source.js' , ' comment.block.documentation.js' , ' storage.type.class.jsdoc' ]
1061+ expect (tokens[5 ]).toEqual value : ' {' , scopes : [' source.js' , ' comment.block.documentation.js' , ' entity.name.type.instance.jsdoc' , ' punctuation.definition.bracket.curly.begin.jsdoc' ]
1062+ expect (tokens[6 ]).toEqual value : ' string="Foo' , scopes : [' source.js' , ' comment.block.documentation.js' , ' entity.name.type.instance.jsdoc' ]
1063+ expect (tokens[7 ]).toEqual value : ' */' , scopes : [' source.js' , ' comment.block.documentation.js' , ' punctuation.section.end.comment.js' ]
1064+ expect (tokens[8 ]).toEqual value : ' oo' , scopes : [' source.js' ]
1065+ expect (tokens[9 ]).toEqual value : ' "' , scopes : [' source.js' , ' string.quoted.double.js' , ' punctuation.definition.string.begin.js' ]
1066+ expect (tokens[10 ]).toEqual value : ' } bar' , scopes : [' source.js' , ' string.quoted.double.js' , ' invalid.illegal.string.js' ]
0 commit comments