MCPcopy
hub / github.com/microsoft/pyright / _parseVarArgsList

Method _parseVarArgsList

server/src/parser/parser.ts:565–642  ·  view source on GitHub ↗
(terminator: TokenType, allowAnnotations: boolean)

Source from the content-addressed store, hash-verified

563 // tfpdef: NAME [':' test]
564 // vfpdef: NAME;
565 private _parseVarArgsList(terminator: TokenType, allowAnnotations: boolean): ParameterNode[] {
566 let paramMap = new StringMap<string>();
567 let paramList: ParameterNode[] = [];
568 let sawDefaultParam = false;
569 let reportedNonDefaultParamErr = false;
570 let sawKwSeparator = false;
571 let sawVarArgs = false;
572 let sawKwArgs = false;
573
574 while (true) {
575 if (this._peekTokenType() === terminator) {
576 break;
577 }
578
579 let param = this._parseParameter(allowAnnotations);
580 if (!param) {
581 this._consumeTokensUntilType(terminator);
582 break;
583 }
584
585 if (param.name) {
586 let name = param.name.nameToken.value;
587 if (!paramMap.set(name, name)) {
588 this._addError(`Duplicate parameter '${ name }'`, param.name);
589 }
590 }
591
592 if (param.category === ParameterCategory.Simple) {
593 if (param.defaultValue) {
594 sawDefaultParam = true;
595 } else if (sawDefaultParam && !sawKwSeparator) {
596 // Report this error only once.
597 if (!reportedNonDefaultParamErr) {
598 this._addError(`Non-default argument follows default argument`, param);
599 reportedNonDefaultParamErr = true;
600 }
601 }
602 }
603
604 paramList.push(param);
605
606 if (param.category === ParameterCategory.VarArgList) {
607 if (!param.name) {
608 if (sawKwSeparator) {
609 this._addError(`Only one '*' separator is allowed`, param);
610 }
611 sawKwSeparator = true;
612 } else {
613 if (sawVarArgs) {
614 this._addError(`Only one '*' parameter is allowed`, param);
615 }
616 sawVarArgs = true;
617 }
618 }
619
620 if (param.category === ParameterCategory.VarArgDictionary) {
621 if (sawKwArgs) {
622 this._addError(`Only one '**' parameter is allowed`, param);

Callers 2

_parseFunctionDefMethod · 0.95

Calls 6

_peekTokenTypeMethod · 0.95
_parseParameterMethod · 0.95
setMethod · 0.95
_addErrorMethod · 0.95
_consumeTokenIfTypeMethod · 0.95

Tested by

no test coverage detected