google / vimdoc

Helpfile generation for vim
Apache License 2.0
291 stars 29 forks source link

[bug] namespace shouldn't be None #119

Open Freed-Wu opened 2 years ago

Freed-Wu commented 2 years ago
❯ vimdoc .
/usr/lib/python3.10/site-packages/vimdoc/block.py:224: DocumentationWarning: Documentation claims optional parameters that function A does not accept.
  warnings.warn(
Traceback (most recent call last):
  File "/usr/bin/vimdoc", line 5, in <module>
    vimdoc.__main__.main()
  File "/usr/lib/python3.10/site-packages/vimdoc/__main__.py", line 18, in main
    for module in Modules(args.plugin):
  File "/usr/lib/python3.10/site-packages/vimdoc/module.py", line 440, in Modules
    module.Close()
  File "/usr/lib/python3.10/site-packages/vimdoc/module.py", line 115, in Close
    if self.GetCollection(vimdoc.FUNCTION) and 'functions' not in self.sections:
  File "/usr/lib/python3.10/site-packages/vimdoc/module.py", line 105, in GetCollection
    non_default_names = set(x.TagName() for x in collection
  File "/usr/lib/python3.10/site-packages/vimdoc/module.py", line 105, in <genexpr>
    non_default_names = set(x.TagName() for x in collection
  File "/usr/lib/python3.10/site-packages/vimdoc/block.py", line 259, in TagName
    return '{}()'.format(self.FullName())
  File "/usr/lib/python3.10/site-packages/vimdoc/block.py", line 248, in FullName
    return self.locals.get('namespace', '') + self.LocalName()
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
""
" @section Introduction, intro
" @library

""
" Test
function! Test() abort
  echo 1
endfunction
dbarnett commented 2 years ago

What's the filename? Is this a .vim file in the directory root, not under a subdir like plugin/, autoload/, etc?

Freed-Wu commented 2 years ago
❯ tree -L 2
 .
├──  doc
└──  plugin
   └──  a.vim
❯ vimdoc .
Traceback (most recent call last):
  File "/usr/bin/vimdoc", line 5, in <module>
    vimdoc.__main__.main()
  File "/usr/lib/python3.10/site-packages/vimdoc/__main__.py", line 18, in main
    for module in Modules(args.plugin):
  File "/usr/lib/python3.10/site-packages/vimdoc/module.py", line 440, in Modules
    module.Close()
  File "/usr/lib/python3.10/site-packages/vimdoc/module.py", line 115, in Close
    if self.GetCollection(vimdoc.FUNCTION) and 'functions' not in self.sections:
  File "/usr/lib/python3.10/site-packages/vimdoc/module.py", line 105, in GetCollection
    non_default_names = set(x.TagName() for x in collection
  File "/usr/lib/python3.10/site-packages/vimdoc/module.py", line 105, in <genexpr>
    non_default_names = set(x.TagName() for x in collection
  File "/usr/lib/python3.10/site-packages/vimdoc/block.py", line 259, in TagName
    return '{}()'.format(self.FullName())
  File "/usr/lib/python3.10/site-packages/vimdoc/block.py", line 248, in FullName
    return self.locals.get('namespace', '') + self.LocalName()
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
dbarnett commented 2 years ago

Agreed, the error message there sucks and should be fixed. Probably it should just skip that file, maybe with a warning that it's not included in the processing.

Freed-Wu commented 2 years ago

I found for autoload/a.vim

❯ tree -L 2
 .
└──  autoload
   └──  a.vim

vimdoc . can work. However, for plugin/a.vim, it cannot (as https://github.com/google/vimdoc/issues/119#issuecomment-1244924473). Is it a bug? Why user cannot declare function in plugin/*.vim?

martindemello commented 1 month ago

https://github.com/google/vimdoc/blob/main/vimdoc/module.py#L50 seems to be where the None gets introduced into locals