From dc92bfc3ba233c701b6dc9a8300586f2929b7cb8 Mon Sep 17 00:00:00 2001 From: Carsten Moberg Hammer Date: Tue, 17 May 2016 09:42:53 +0200 Subject: [PATCH 1/3] Support both @returns and its alias @return as described in JSDoc 3 --- closure_linter/error_fixer.py | 5 ----- closure_linter/javascriptlintrules.py | 6 +++--- closure_linter/statetracker.py | 1 + 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/closure_linter/error_fixer.py b/closure_linter/error_fixer.py index 221550a..6ad20af 100644 --- a/closure_linter/error_fixer.py +++ b/closure_linter/error_fixer.py @@ -199,11 +199,6 @@ def HandleError(self, error): self._DeleteToken(token) self._AddFix(token) - elif code == errors.INVALID_JSDOC_TAG: - if token.string == '@returns': - token.string = '@return' - self._AddFix(token) - elif code == errors.FILE_MISSING_NEWLINE: # This error is fixed implicitly by the way we restore the file self._AddFix(token) diff --git a/closure_linter/javascriptlintrules.py b/closure_linter/javascriptlintrules.py index 79c6448..acbf30f 100644 --- a/closure_linter/javascriptlintrules.py +++ b/closure_linter/javascriptlintrules.py @@ -276,7 +276,7 @@ def CheckToken(self, token, state): if not self._limited_doc_checks: if (function.has_return and function.doc and not is_immediately_called and - not function.doc.HasFlag('return') and + not (function.doc.HasFlag('returns') or function.doc.HasFlag('return')) and not function.doc.InheritsDocumentation() and not function.doc.HasFlag('constructor')): # Check for proper documentation of return value. @@ -287,9 +287,9 @@ def CheckToken(self, token, state): elif (not function.has_return and not function.has_throw and function.doc and - function.doc.HasFlag('return') and + (function.doc.HasFlag('returns') or function.doc.HasFlag('return')) and not state.InInterfaceMethod()): - flag = function.doc.GetFlag('return') + flag = function.doc.GetFlag('returns') if function.doc.GetFlag('returns') else function.doc.GetFlag('return') valid_no_return_names = ['undefined', 'void', '*'] invalid_return = flag.jstype is None or not any( sub_type.identifier in valid_no_return_names diff --git a/closure_linter/statetracker.py b/closure_linter/statetracker.py index 0b8fdf3..679b048 100644 --- a/closure_linter/statetracker.py +++ b/closure_linter/statetracker.py @@ -89,6 +89,7 @@ class DocFlag(object): 'protected', 'public', 'return', + 'returns', 'see', 'stableIdGenerator', 'struct', From a038919a66ea1efc5bce4d5e960758fcb9772da8 Mon Sep 17 00:00:00 2001 From: Carsten Moberg Hammer Date: Fri, 10 Jun 2016 10:53:28 +0200 Subject: [PATCH 2/3] Refactored to use or --- closure_linter/javascriptlintrules.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/closure_linter/javascriptlintrules.py b/closure_linter/javascriptlintrules.py index acbf30f..595e502 100644 --- a/closure_linter/javascriptlintrules.py +++ b/closure_linter/javascriptlintrules.py @@ -289,7 +289,7 @@ def CheckToken(self, token, state): function.doc and (function.doc.HasFlag('returns') or function.doc.HasFlag('return')) and not state.InInterfaceMethod()): - flag = function.doc.GetFlag('returns') if function.doc.GetFlag('returns') else function.doc.GetFlag('return') + flag = function.doc.GetFlag('returns') or function.doc.GetFlag('return') valid_no_return_names = ['undefined', 'void', '*'] invalid_return = flag.jstype is None or not any( sub_type.identifier in valid_no_return_names From 6c50c029e3c765710371dfa715a40a547e22b81d Mon Sep 17 00:00:00 2001 From: Carsten Moberg Hammer Date: Fri, 10 Jun 2016 10:54:29 +0200 Subject: [PATCH 3/3] Added @returns testcases --- closure_linter/testdata/jsdoc.js | 45 +++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/closure_linter/testdata/jsdoc.js b/closure_linter/testdata/jsdoc.js index 27b292c..bbd4b12 100644 --- a/closure_linter/testdata/jsdoc.js +++ b/closure_linter/testdata/jsdoc.js @@ -51,7 +51,6 @@ goog.require('goog.math.Vec2'); /** - * @returns // INVALID_JSDOC_TAG * @params // INVALID_JSDOC_TAG * @defines // INVALID_JSDOC_TAG * @nginject // INVALID_JSDOC_TAG @@ -169,6 +168,14 @@ function goodReturn() { } +/** + * @returns {boolean} A boolean primitive. + */ +function goodReturns() { + return something; +} + + /** * @return {some.long.type.that.will.make.the.description.start.on.next.line} * An object. @@ -178,6 +185,15 @@ function anotherGoodReturn() { } +/** + * @returns {some.long.type.that.will.make.the.description.start.on.next.line} + * An object. + */ +function anotherGoodReturns() { + return something; +} + + // +2: MISSING_JSDOC_TAG_TYPE /** * @return false. @@ -187,6 +203,15 @@ function missingReturnType() { } +// +2: MISSING_JSDOC_TAG_TYPE +/** + * @returns false. + */ +function missingReturnsType() { + return something; +} + + // +2: MISSING_SPACE /** * @return{type} @@ -196,6 +221,15 @@ function missingSpaceOnReturnType() { } +// +2: MISSING_SPACE +/** + * @returns{type} + */ +function missingSpaceOnReturnsType() { + return something; +} + + // +2: MISSING_JSDOC_TAG_TYPE /** * @return @@ -204,6 +238,15 @@ function missingReturnType() { return something; } + +// +2: MISSING_JSDOC_TAG_TYPE +/** + * @returns + */ +function missingReturnsType() { + return something; +} + class.missingDocs = function() { // MISSING_MEMBER_DOCUMENTATION };