From 6eba035ea97232d3a629f513ef8cd449fa41ffbc Mon Sep 17 00:00:00 2001 From: lharker Date: Thu, 9 Aug 2018 16:30:35 -0700 Subject: [PATCH] Attach JSDoc to correct nodes in array pattern with elision e.g. const [, /** string */ str] = []; ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=208130879 --- .../javascript/jscomp/parsing/parser/Parser.java | 3 ++- .../javascript/jscomp/parsing/ParserTest.java | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/com/google/javascript/jscomp/parsing/parser/Parser.java b/src/com/google/javascript/jscomp/parsing/parser/Parser.java index 461286fa519..2c73a27e64c 100644 --- a/src/com/google/javascript/jscomp/parsing/parser/Parser.java +++ b/src/com/google/javascript/jscomp/parsing/parser/Parser.java @@ -3683,8 +3683,9 @@ private ParseTree parseArrayPattern(PatternKind kind) { eat(TokenType.OPEN_SQUARE); while (peek(TokenType.COMMA) || peekArrayPatternElement()) { if (peek(TokenType.COMMA)) { + SourcePosition nullStart = getTreeStartLocation(); eat(TokenType.COMMA); - elements.add(new NullTree(getTreeLocation(getTreeStartLocation()))); + elements.add(new NullTree(getTreeLocation(nullStart))); } else { elements.add(parsePatternAssignmentTarget(kind)); diff --git a/test/com/google/javascript/jscomp/parsing/ParserTest.java b/test/com/google/javascript/jscomp/parsing/ParserTest.java index 13ac4551bbc..6424ad9ff6d 100644 --- a/test/com/google/javascript/jscomp/parsing/ParserTest.java +++ b/test/com/google/javascript/jscomp/parsing/ParserTest.java @@ -1123,6 +1123,22 @@ public void testInlineJSDocAttachmentToArrayPatElementQualifiedNameWithDefault() assertNodeHasJSDocInfoWithJSType(xYZName, STRING_TYPE); } + public void testInlineJSDocAttachmentToArrayPatElementAfterElision() { + Node letNode = + parse("let [, /** string */ x] = [];") + .getFirstChild(); + assertNode(letNode).hasType(Token.LET); + + Node destructuringLhs = letNode.getFirstChild(); + Node arrayPattern = destructuringLhs.getFirstChild(); + Node empty = arrayPattern.getFirstChild(); + assertNode(empty).hasToken(Token.EMPTY); + assertNode(empty).hasCharno(5); + assertNode(empty).hasLength(1); + Node xVarName = arrayPattern.getSecondChild(); + assertNodeHasJSDocInfoWithJSType(xVarName, STRING_TYPE); + } + public void testInlineJSDocAttachmentToObjLitNormalProp() { Node letNode = parse("let x = { normalProp: /** string */ normalPropTarget };").getFirstChild(); assertNode(letNode).hasType(Token.LET);