luacats_parser_spec.lua 1.8 KB

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