diff --git a/README.md b/README.md index f68008be..9434f54b 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ Is your favorite doc standard not supported? | :white_check_mark: | Kotlin | [KDoc][kdoc] | | :white_check_mark: | R | [Roxygen2][roxygen2] | | :white_check_mark: | C++ | [Doxygen][doxygen] | +| :white_check_mark: | C | [Doxygen][doxygen], [Kernel doc][kerneldoc] | # Getting started @@ -119,21 +120,22 @@ If you want to change the doc standard specifically for a buffer you can do: Here is the full list of available doc standards per filetype: -| Variable | Default | Supported | -| :--------------------------------- | :----------- | :--------------------------------------------------------------------------------------------------------------------------- | -| `g:doge_doc_standard_python` | `'reST'` | `'reST'`, `'numpy'`, `'google'`, `'sphinx'` | -| `g:doge_doc_standard_php` | `'phpdoc'` | `'phpdoc'` | -| `g:doge_doc_standard_javascript` | `'jsdoc'` | `'jsdoc'` | -| `g:doge_doc_standard_typescript` | `'jsdoc'` | `'jsdoc'` | -| `g:doge_doc_standard_coffeescript` | `'jsdoc'` | `'jsdoc'` | -| `g:doge_doc_standard_lua` | `'ldoc'` | `'ldoc'` | -| `g:doge_doc_standard_java` | `'javadoc'` | `'javadoc'` | -| `g:doge_doc_standard_groovy` | `'javadoc'` | `'javadoc'` | -| `g:doge_doc_standard_ruby` | `'YARD'` | `'YARD'` | -| `g:doge_doc_standard_scala` | `'scaladoc'` | `'scaladoc'` | -| `g:doge_doc_standard_kotlin` | `'kdoc'` | `'kdoc'` | -| `g:doge_doc_standard_r` | `'roxygen2'` | `'roxygen2'` | -| `g:doge_doc_standard_cpp` | `'doxygen'` | `'doxygen_javadoc'`, `'doxygen_javadoc_no_asterisk'`, `'doxygen_javadoc_banner'`, `'doxygen_qt'`, `'doxygen_qt_no_asterisk'` | +| Variable | Default | Supported | +| :--------------------------------- | :----------- | :----------------------------------------------------------------------------------------------------------------------------------------- | +| `g:doge_doc_standard_python` | `'reST'` | `'reST'`, `'numpy'`, `'google'`, `'sphinx'` | +| `g:doge_doc_standard_php` | `'phpdoc'` | `'phpdoc'` | +| `g:doge_doc_standard_javascript` | `'jsdoc'` | `'jsdoc'` | +| `g:doge_doc_standard_typescript` | `'jsdoc'` | `'jsdoc'` | +| `g:doge_doc_standard_coffeescript` | `'jsdoc'` | `'jsdoc'` | +| `g:doge_doc_standard_lua` | `'ldoc'` | `'ldoc'` | +| `g:doge_doc_standard_java` | `'javadoc'` | `'javadoc'` | +| `g:doge_doc_standard_groovy` | `'javadoc'` | `'javadoc'` | +| `g:doge_doc_standard_ruby` | `'YARD'` | `'YARD'` | +| `g:doge_doc_standard_scala` | `'scaladoc'` | `'scaladoc'` | +| `g:doge_doc_standard_kotlin` | `'kdoc'` | `'kdoc'` | +| `g:doge_doc_standard_r` | `'roxygen2'` | `'roxygen2'` | +| `g:doge_doc_standard_cpp` | `'doxygen'` | `'doxygen_javadoc'`, `'doxygen_javadoc_no_asterisk'`, `'doxygen_javadoc_banner'`, `'doxygen_qt'`, `'doxygen_qt_no_asterisk'` | +| `g:doge_doc_standard_c` | `'doxygen'` | `'kernel_doc'`, `'doxygen_javadoc'`, `'doxygen_javadoc_no_asterisk'`, `'doxygen_javadoc_banner'`, `'doxygen_qt'`, `'doxygen_qt_no_asterisk'` | ## Options @@ -285,6 +287,7 @@ DoGe is licensed under the GPL-3.0 license. [kdoc]: https://kotlinlang.org/docs/reference/kotlin-doc.html [roxygen2]: https://github.com/klutometis/roxygen [doxygen]: http://www.doxygen.nl +[kerneldoc]: https://www.kernel.org/doc/html/latest/doc-guide/kernel-doc.html [demo-readme]: https://github.com/kkoomen/vim-doge/blob/master/doc/demos [suggest-language]: https://github.com/kkoomen/vim-doge/issues/new?labels=enhancement&template=feature_request.md&title=Add+support+for+ diff --git a/ftplugin/c.vim b/ftplugin/c.vim new file mode 100644 index 00000000..5e44fe67 --- /dev/null +++ b/ftplugin/c.vim @@ -0,0 +1,101 @@ +" ============================================================================== +" The C documentation should follow the 'Doxygen' conventions. +" see http://www.doxygen.nl/manual/docblocks.html +" ============================================================================== + +let s:save_cpo = &cpoptions +set cpoptions&vim + +let b:doge_pattern_single_line_comment = '\m\(\/\*.\{-}\*\/\|\/\/.\{-}$\)' +let b:doge_pattern_multi_line_comment = '\m\/\*.\{-}\*\/' + +let b:doge_supported_doc_standards = [ + \ 'doxygen_javadoc', + \ 'doxygen_javadoc_no_asterisk', + \ 'doxygen_javadoc_banner', + \ 'doxygen_qt', + \ 'doxygen_qt_no_asterisk', + \ 'kernel_doc' + \ ] +let b:doge_doc_standard = get(g:, 'doge_doc_standard_c', b:doge_supported_doc_standards[0]) +if index(b:doge_supported_doc_standards, b:doge_doc_standard) < 0 + echoerr printf( + \ '[DoGe] %s is not a valid C doc standard, available doc standard are: %s', + \ b:doge_doc_standard, + \ join(b:doge_supported_doc_standards, ', ') + \ ) +endif + +let b:doge_patterns = [] + +call add(b:doge_patterns, { +\ 'generator': 'libclang.py', +\ 'parameters': { +\ 'format': { +\ 'doxygen_javadoc': '@{param-type|param} {name} !description', +\ 'doxygen_javadoc_no_asterisk': '@{param-type|param} {name} !description', +\ 'doxygen_javadoc_banner': '@{param-type|param} {name} !description', +\ 'doxygen_qt': '@{param-type|param} {name} !description', +\ 'doxygen_qt_no_asterisk': '@{param-type|param} {name} !description', +\ 'kernel_doc': '@{param-type|param} {name} !description', +\ }, +\ }, +\ 'comment': { +\ 'insert': 'above', +\ 'template': { +\ 'doxygen_javadoc': [ +\ '/**', +\ ' * @brief !description', +\ ' *', +\ '%(parameters| * {parameters})%', +\ '%(returnType| * @return !description)%', +\ ' */', +\ ], +\ 'doxygen_javadoc_no_asterisk': [ +\ '/**', +\ '@brief !description', +\ '', +\ '%(parameters|{parameters})%', +\ '%(returnType|@return !description)%', +\ '*/', +\ ], +\ 'doxygen_javadoc_banner': [ +\ '/*******************************************************************************', +\ ' * @brief !description', +\ ' *', +\ '%(parameters| * {parameters})%', +\ '%(returnType| * @return !description)%', +\ ' ******************************************************************************/', +\ ], +\ 'doxygen_qt': [ +\ '/*!', +\ ' * @brief !description', +\ ' *', +\ '%(parameters| * {parameters})%', +\ '%(returnType| * @return !description)%', +\ ' */', +\ ], +\ 'doxygen_qt_no_asterisk': [ +\ '/*!', +\ '@brief !description', +\ '', +\ '%(parameters|{parameters})%', +\ '%(returnType|@return !description)%', +\ '*/', +\ ], +\ 'kernel_doc': [ +\ '/**', +\ ' * {funcName}(): !description', +\ '%(parameters| * {parameters})%', +\ ' *', +\ ' * !description', +\ ' *', +\ '%(returnType| * Return: !description)%', +\ ' */', +\ ], +\ }, +\ }, +\}) + +let &cpoptions = s:save_cpo +unlet s:save_cpo diff --git a/generators/libclang.py b/generators/libclang.py index c5a09cb6..1f53e845 100755 --- a/generators/libclang.py +++ b/generators/libclang.py @@ -107,7 +107,7 @@ def main(): node = find_node(tu.cursor, current_line) if node: if node.kind in [CursorKind.CONSTRUCTOR, CursorKind.CXX_METHOD, CursorKind.FUNCTION_DECL, CursorKind.FUNCTION_TEMPLATE]: - FUNCTION['name'] = node.spelling + FUNCTION['funcName'] = node.spelling FUNCTION['returnType'] = node.result_type.spelling if 'parameters' not in FUNCTION.keys(): FUNCTION['parameters'] = [] diff --git a/playground/test.c b/playground/test.c new file mode 100644 index 00000000..047f30e9 --- /dev/null +++ b/playground/test.c @@ -0,0 +1,10 @@ +/** + * add(): [TODO:description] + * @param x [TODO:description] + * @param y [TODO:description] + * + * [TODO:description] + * + * Return: [TODO:description] + */ +int add(int x, int y) {}