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

Method _parseFromStatement

server/src/parser/parser.ts:899–956  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

897 // import_as_names: import_as_name (',' import_as_name)* [',']
898 // import_as_name: NAME ['as' NAME]
899 private _parseFromStatement(): ImportFromNode {
900 let fromToken = this._getKeywordToken(KeywordType.From);
901
902 let modName = this._parseDottedModuleName(true);
903 let importFromNode = new ImportFromNode(fromToken, modName);
904
905 if (!this._consumeTokenIfKeyword(KeywordType.Import)) {
906 this._addError('Expected "import"', this._peekToken());
907 } else {
908 // Look for "*" token.
909 if (!this._consumeTokenIfOperator(OperatorType.Multiply)) {
910 let inParen = this._consumeTokenIfType(TokenType.OpenParenthesis);
911
912 while (true) {
913 let importName = this._getTokenIfIdentifier();
914 if (!importName) {
915 break;
916 }
917
918 let importFromAsNode = new ImportFromAsNode(new NameNode(importName));
919
920 if (this._consumeTokenIfKeyword(KeywordType.As)) {
921 let aliasName = this._getTokenIfIdentifier();
922 if (!aliasName) {
923 this._addError('Expected alias symbol name', this._peekToken());
924 } else {
925 importFromAsNode.alias = new NameNode(aliasName);
926 importFromAsNode.extend(aliasName);
927 }
928 }
929
930 importFromNode.imports.push(importFromAsNode);
931 importFromNode.extend(importFromAsNode);
932
933 if (!this._consumeTokenIfType(TokenType.Comma)) {
934 break;
935 }
936 }
937
938 if (importFromNode.imports.length === 0) {
939 this._addError('Expected imported symbol name', this._peekToken());
940 }
941
942 if (inParen) {
943 let nextToken = this._peekToken();
944 if (!this._consumeTokenIfType(TokenType.CloseParenthesis)) {
945 this._addError('Expected ")"', this._peekToken());
946 } else {
947 importFromNode.extend(nextToken);
948 }
949 }
950 }
951 }
952
953 // TODO - need to process __future__ imports
954
955 return importFromNode;
956 }

Callers 1

_parseSmallStatementMethod · 0.95

Calls 9

_getKeywordTokenMethod · 0.95
_addErrorMethod · 0.95
_peekTokenMethod · 0.95
_consumeTokenIfTypeMethod · 0.95
_getTokenIfIdentifierMethod · 0.95
extendMethod · 0.80

Tested by

no test coverage detected