tbel: validation "foreach" optimized
This commit is contained in:
		
							parent
							
								
									6273175d49
								
							
						
					
					
						commit
						100e3f3d49
					
				@ -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',
 | 
			
		||||
 | 
			
		||||
@ -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.",
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user