luacats_parser_spec.lua (1805B)
1 local t = require('test.testutil') 2 3 local eq = t.eq 4 5 local parser = require('gen.luacats_parser') 6 7 --- @param name string 8 --- @param text string 9 --- @param exp table<string,string> 10 local function test(name, text, exp) 11 exp = vim.deepcopy(exp, true) 12 it(name, function() 13 eq(exp, parser.parse_str(text, 'myfile.lua')) 14 end) 15 end 16 17 describe('luacats parser', function() 18 local exp = { 19 myclass = { 20 kind = 'class', 21 module = 'myfile.lua', 22 name = 'myclass', 23 fields = { 24 { kind = 'field', name = 'myclass', type = 'integer' }, 25 }, 26 }, 27 } 28 29 test( 30 'basic class', 31 [[ 32 --- @class myclass 33 --- @field myclass integer 34 ]], 35 exp 36 ) 37 38 exp.myclass.inlinedoc = true 39 40 test( 41 'class with @inlinedoc (1)', 42 [[ 43 --- @class myclass 44 --- @inlinedoc 45 --- @field myclass integer 46 ]], 47 exp 48 ) 49 50 test( 51 'class with @inlinedoc (2)', 52 [[ 53 --- @inlinedoc 54 --- @class myclass 55 --- @field myclass integer 56 ]], 57 exp 58 ) 59 60 exp.myclass.inlinedoc = nil 61 exp.myclass.nodoc = true 62 63 test( 64 'class with @nodoc', 65 [[ 66 --- @nodoc 67 --- @class myclass 68 --- @field myclass integer 69 ]], 70 exp 71 ) 72 73 exp.myclass.nodoc = nil 74 exp.myclass.access = 'private' 75 76 test( 77 'class with (private)', 78 [[ 79 --- @class (private) myclass 80 --- @field myclass integer 81 ]], 82 exp 83 ) 84 85 exp.myclass.fields[1].desc = 'Field\ndocumentation' 86 87 test( 88 'class with field doc above', 89 [[ 90 --- @class (private) myclass 91 --- Field 92 --- documentation 93 --- @field myclass integer 94 ]], 95 exp 96 ) 97 98 exp.myclass.fields[1].desc = 'Field documentation' 99 test( 100 'class with field doc inline', 101 [[ 102 --- @class (private) myclass 103 --- @field myclass integer Field documentation 104 ]], 105 exp 106 ) 107 end)