simplify isLookaheadRelational method (#11922)

* refactor: move isLookaheadRelational to flow plugins

* refactor: simplify isLookaheadRelational to isLookaheadToken_lt
This commit is contained in:
Huáng Jùnliàng 2020-08-05 20:21:35 -04:00 committed by GitHub
parent cd577eedfd
commit 76f033f8c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 14 deletions

View File

@ -6,7 +6,6 @@ import State from "../tokenizer/state";
import type { Node } from "../types"; import type { Node } from "../types";
import { lineBreak } from "../util/whitespace"; import { lineBreak } from "../util/whitespace";
import { isIdentifierChar } from "../util/identifier"; import { isIdentifierChar } from "../util/identifier";
import * as charCodes from "charcodes";
import { Errors } from "./error"; import { Errors } from "./error";
type TryParse<Node, Error, Thrown, Aborted, FailState> = { type TryParse<Node, Error, Thrown, Aborted, FailState> = {
@ -35,18 +34,6 @@ export default class UtilParser extends Tokenizer {
return this.match(tt.relational) && this.state.value === op; return this.match(tt.relational) && this.state.value === op;
} }
isLookaheadRelational(op: "<" | ">"): boolean {
const next = this.nextTokenStart();
if (this.input.charAt(next) === op) {
if (next + 1 === this.input.length) {
return true;
}
const afterNext = this.input.charCodeAt(next + 1);
return afterNext !== op.charCodeAt(0) && afterNext !== charCodes.equalsTo;
}
return false;
}
// TODO // TODO
expectRelational(op: "<" | ">"): void { expectRelational(op: "<" | ">"): void {

View File

@ -2873,7 +2873,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
noCalls: ?boolean, noCalls: ?boolean,
subscriptState: N.ParseSubscriptState, subscriptState: N.ParseSubscriptState,
): N.Expression { ): N.Expression {
if (this.match(tt.questionDot) && this.isLookaheadRelational("<")) { if (this.match(tt.questionDot) && this.isLookaheadToken_lt()) {
subscriptState.optionalChainMember = true; subscriptState.optionalChainMember = true;
if (noCalls) { if (noCalls) {
subscriptState.stop = true; subscriptState.stop = true;
@ -3475,4 +3475,16 @@ export default (superClass: Class<Parser>): Class<Parser> =>
super.updateContext(prevType); super.updateContext(prevType);
} }
} }
// check if the next token is a tt.relation("<")
isLookaheadToken_lt(): boolean {
const next = this.nextTokenStart();
if (this.input.charCodeAt(next) === charCodes.lessThan) {
const afterNext = this.input.charCodeAt(next + 1);
return (
afterNext !== charCodes.lessThan && afterNext !== charCodes.equalsTo
);
}
return false;
}
}; };