Skip to content

Commit

Permalink
feat: Setup basic support for C
Browse files Browse the repository at this point in the history
  • Loading branch information
kkoomen committed Nov 15, 2019
1 parent f340b6c commit f08c35d
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 16 deletions.
33 changes: 18 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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+<language>
Expand Down
101 changes: 101 additions & 0 deletions ftplugin/c.vim
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion generators/libclang.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'] = []
Expand Down
10 changes: 10 additions & 0 deletions playground/test.c
Original file line number Diff line number Diff line change
@@ -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) {}

0 comments on commit f08c35d

Please sign in to comment.