From 98329fcf771ad9179331d2daec835eb40995964a Mon Sep 17 00:00:00 2001 From: Daniel Mathiot Date: Tue, 24 Aug 2021 11:43:45 +0200 Subject: [PATCH] Add basic support for javascript At the moment, it recognizes simple functions, their params and their direct return statements. --- README.md | 5 ++- lua/neogen.lua | 5 ++- lua/neogen/configurations/javascript.lua | 40 ++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 lua/neogen/configurations/javascript.lua diff --git a/README.md b/README.md index e27ef6b..9f07e47 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ If you're not satisfied with the default configuration for a language, you can c ```lua require('neogen').setup { - enabled = true, + enabled = true, languages = { lua = { template = { @@ -91,6 +91,9 @@ There is a list of supported languages and fields, with their annotation style | python | | | | | Google docstrings (`"google_docstrings"`) | `Args`, `Attributes`, `Returns` | | | Numpydoc (`"numpydoc"`)| `Arguments`, `Attributes`, `Returns`| +| javascript | | | +| | JSDoc (`"jsdoc"`) | `@param`, `@returns` | + ## Adding Languages diff --git a/lua/neogen.lua b/lua/neogen.lua index 48490bf..672ced1 100644 --- a/lua/neogen.lua +++ b/lua/neogen.lua @@ -67,10 +67,13 @@ neogen.setup = function(opts) languages = { lua = require("neogen.configurations.lua"), python = require("neogen.configurations.python"), + javascript = require("neogen.configurations.javascript") }, }) - neogen.generate_command() + if neogen.configuration.enabled == true then + neogen.generate_command() + end end return neogen diff --git a/lua/neogen/configurations/javascript.lua b/lua/neogen/configurations/javascript.lua new file mode 100644 index 0000000..f97207e --- /dev/null +++ b/lua/neogen/configurations/javascript.lua @@ -0,0 +1,40 @@ +return { + parent = { "function_declaration" }, + + data = { + ["function_declaration"] = { + ["0"] = { + + extract = function (node) + local results = {} + local tree = { + { retrieve = "first", node_type = "formal_parameters", subtree = { + { retrieve = "all", node_type = "identifier", extract = true } + } }, + { retrieve = "first", node_type = "statement_block", subtree = { + { retrieve = "first", node_type = "return_statement", extract = true } + } } + } + local nodes = neogen.utilities.nodes:matching_nodes_from(node, tree) + local res = neogen.utilities.extractors:extract_from_matched(nodes) + + results.parameters = res.identifier + results.return_statement = res.return_statement + return results + end + } + } + }, + + template = { + annotation_convention = "jsdoc", + use_default_comment = false, + + jsdoc = { + { nil, "/**" }, + { "parameters", " * @param {any} %s " }, + { "return_statement", " * @returns {any} " }, + { nil, " */" } + } + } +}