????JFIF??x?x????'
Server IP : 79.136.114.73 / Your IP : 3.148.211.202 Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64 User : www-data ( 33) PHP Version : 5.5.9-1ubuntu4.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/appsrv.astacus.se/forge/node_modules/eslint/lib/rules/ |
Upload File : |
/** * @fileoverview Disallow Labeled Statements * @author Nicholas C. Zakas */ "use strict"; //------------------------------------------------------------------------------ // Requirements //------------------------------------------------------------------------------ const astUtils = require("../util/ast-utils"); //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ module.exports = { meta: { type: "suggestion", docs: { description: "disallow labeled statements", category: "Best Practices", recommended: false, url: "https://eslint.org/docs/rules/no-labels" }, schema: [ { type: "object", properties: { allowLoop: { type: "boolean", default: false }, allowSwitch: { type: "boolean", default: false } }, additionalProperties: false } ] }, create(context) { const options = context.options[0]; const allowLoop = options && options.allowLoop; const allowSwitch = options && options.allowSwitch; let scopeInfo = null; /** * Gets the kind of a given node. * * @param {ASTNode} node - A node to get. * @returns {string} The kind of the node. */ function getBodyKind(node) { if (astUtils.isLoop(node)) { return "loop"; } if (node.type === "SwitchStatement") { return "switch"; } return "other"; } /** * Checks whether the label of a given kind is allowed or not. * * @param {string} kind - A kind to check. * @returns {boolean} `true` if the kind is allowed. */ function isAllowed(kind) { switch (kind) { case "loop": return allowLoop; case "switch": return allowSwitch; default: return false; } } /** * Checks whether a given name is a label of a loop or not. * * @param {string} label - A name of a label to check. * @returns {boolean} `true` if the name is a label of a loop. */ function getKind(label) { let info = scopeInfo; while (info) { if (info.label === label) { return info.kind; } info = info.upper; } /* istanbul ignore next: syntax error */ return "other"; } //-------------------------------------------------------------------------- // Public //-------------------------------------------------------------------------- return { LabeledStatement(node) { scopeInfo = { label: node.label.name, kind: getBodyKind(node.body), upper: scopeInfo }; }, "LabeledStatement:exit"(node) { if (!isAllowed(scopeInfo.kind)) { context.report({ node, message: "Unexpected labeled statement." }); } scopeInfo = scopeInfo.upper; }, BreakStatement(node) { if (node.label && !isAllowed(getKind(node.label.name))) { context.report({ node, message: "Unexpected label in break statement." }); } }, ContinueStatement(node) { if (node.label && !isAllowed(getKind(node.label.name))) { context.report({ node, message: "Unexpected label in continue statement." }); } } }; } };