tbel: validation "foreach" optimized

This commit is contained in:
nickAS21 2023-04-20 13:28:07 +03:00
parent 6273175d49
commit 100e3f3d49
2 changed files with 5 additions and 104 deletions

View File

@ -39,7 +39,7 @@ import { CancelAnimationFrame, RafService } from '@core/services/raf.service';
import { ResizeObserver } from '@juggle/resize-observer';
import { TbEditorCompleter } from '@shared/models/ace/completion.models';
import { beautifyJs } from '@shared/models/beautify.models';
import {ScriptLanguage} from "@shared/models/rule-node.models";
import { ScriptLanguage } from "@shared/models/rule-node.models";
@Component({
selector: 'tb-js-func',

View File

@ -8044,29 +8044,8 @@ var JSHINT = (function() {
}).labelled = true;
blockstmt("foreach", function(context) {
var s, t = state.tokens.next;
var t = state.tokens.next;
var letscope = false;
var isAsync = false;
var foreachtok = null;
if (t.value === "each") {
foreachtok = t;
advance("each");
if (!state.inMoz()) {
warning("W118", state.tokens.curr, "for each");
}
}
if (state.tokens.next.identifier && state.tokens.next.value === "await") {
advance("await");
isAsync = true;
if (!(context & prodParams.async)) {
error("E024", state.tokens.curr, "await");
} else if (!state.inES9()) {
warning("W119", state.tokens.curr, "asynchronous iteration", "9");
}
}
increaseComplexityCount();
advance("(");
@ -8076,32 +8055,12 @@ var JSHINT = (function() {
var bindingPower;
var targets;
var target;
var decl;
var afterNext = peek();
var functionName = this;
var headContext = context | prodParams.noin;
if (state.tokens.next.id === "var") {
advance("var");
decl = state.tokens.curr.fud(headContext);
comma = decl.hasComma ? decl : null;
initializer = decl.hasInitializer ? decl : null;
} else if (state.tokens.next.id === "const" ||
(state.tokens.next.id === "let" &&
((afterNext.identifier && afterNext.id !== "in") ||
checkPunctuators(afterNext, ["{", "["])))) {
advance(state.tokens.next.id);
letscope = true;
state.funct["(scope)"].stack();
decl = state.tokens.curr.fud(headContext);
comma = decl.hasComma ? decl : null;
initializer = decl.hasInitializer ? decl : null;
} else if (!checkPunctuator(state.tokens.next, ";")) {
if (!checkPunctuator(state.tokens.next, ";")) {
targets = [];
while (state.tokens.next.value !== ":" &&
state.tokens.next.value !== "of" &&
!checkPunctuator(state.tokens.next, ";")) {
if (checkPunctuators(state.tokens.next, ["{", "["])) {
@ -8135,30 +8094,12 @@ var JSHINT = (function() {
}
}
}
if (!initializer && !comma) {
targets.forEach(function(token) {
if (!state.funct["(scope)"].has(token.value)) {
warning("W288", functionName, functionName.value);
}
});
}
}
nextop = state.tokens.next;
if (isAsync && nextop.value !== "of") {
error("E066", nextop);
}
if (_.includes([":", "of"], nextop.value)) {
if (nextop.value === "of") {
bindingPower = 20;
if (!state.inES6()) {
warning("W104", nextop, "for of", "6");
}
} else {
if (_.includes([":"], nextop.value)) {
bindingPower = 0;
}
if (comma) {
error("W133", comma, nextop.value, "more than one ForBinding");
}
@ -8173,54 +8114,14 @@ var JSHINT = (function() {
expression(context, bindingPower);
advance(")", t);
if (nextop.value === "in" && state.option.forin) {
state.forinifcheckneeded = true;
if (state.forinifchecks === undefined) {
state.forinifchecks = [];
}
state.forinifchecks.push({
type: "(none)"
});
}
state.funct["(breakage)"] += 1;
state.funct["(loopage)"] += 1;
s = block(context, true, true);
if (nextop.value === "in" && state.option.forin) {
if (state.forinifchecks && state.forinifchecks.length > 0) {
var check = state.forinifchecks.pop();
if (// No if statement or not the first statement in loop body
s && s.length > 0 && (typeof s[0] !== "object" || s[0].value !== "if") ||
check.type === "(positive)" && s.length > 1 ||
check.type === "(negative)") {
warning("W089", this);
}
}
state.forinifcheckneeded = false;
}
state.funct["(breakage)"] -= 1;
state.funct["(loopage)"] -= 1;
} else {
if (foreachtok) {
error("E045", foreachtok);
}
nolinebreak(state.tokens.curr);
advance(";");
if (decl) {
if (decl.value === "const" && !decl.hasInitializer) {
warning("E012", decl, decl.first[0].value);
}
decl.first.forEach(function(token) {
state.funct["(scope)"].initialize(token.value);
});
}
state.funct["(loopage)"] += 1;
if (state.tokens.next.id !== ";") {
checkCondAssignment(expression(context, 0));
@ -11439,7 +11340,7 @@ var warnings = {
W086: "Expected a 'break' statement before '{a}'.",
W087: "Forgotten 'debugger' statement?",
W088: "Creating global 'for' variable. Should be 'for (var {a} ...'.",
W288: "The syntax of function '{a}' is specific to TBEL, and is not supported by JS executor.",
// W288: "The syntax of function '{a}' is specific to TBEL, and is not supported by JS executor.",
W089: "The body of a for in should be wrapped in an if statement to filter " +
"unwanted properties from the prototype.",
W090: "'{a}' is not a statement label.",