neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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)