(allowJustDots = false)
| 992 | // ('.' | '...')* dotted_name | ('.' | '...')+ |
| 993 | // dotted_name: NAME ('.' NAME)* |
| 994 | private _parseDottedModuleName(allowJustDots = false): ModuleNameNode { |
| 995 | let moduleNameNode = new ModuleNameNode(this._peekToken()); |
| 996 | |
| 997 | while (true) { |
| 998 | if (this._consumeTokenIfType(TokenType.Ellipsis)) { |
| 999 | moduleNameNode.leadingDots += 3; |
| 1000 | } else if (this._consumeTokenIfType(TokenType.Dot)) { |
| 1001 | moduleNameNode.leadingDots++; |
| 1002 | } else { |
| 1003 | break; |
| 1004 | } |
| 1005 | } |
| 1006 | |
| 1007 | while (true) { |
| 1008 | let identifier = this._getTokenIfIdentifier([KeywordType.Import]); |
| 1009 | if (!identifier) { |
| 1010 | if (!allowJustDots || moduleNameNode.leadingDots === 0) { |
| 1011 | this._addError('Expected module name', this._peekToken()); |
| 1012 | } |
| 1013 | break; |
| 1014 | } |
| 1015 | |
| 1016 | moduleNameNode.nameParts.push(new NameNode(identifier)); |
| 1017 | moduleNameNode.extend(identifier); |
| 1018 | |
| 1019 | if (!this._consumeTokenIfType(TokenType.Dot)) { |
| 1020 | break; |
| 1021 | } |
| 1022 | } |
| 1023 | |
| 1024 | return moduleNameNode; |
| 1025 | } |
| 1026 | |
| 1027 | private _parseGlobalStatement(): GlobalNode { |
| 1028 | let globalToken = this._getKeywordToken(KeywordType.Global); |
no test coverage detected