diff --git a/src/language/utils.ts b/src/language/utils.ts index 1c58f7fcf64..2be698c45c1 100644 --- a/src/language/utils.ts +++ b/src/language/utils.ts @@ -197,3 +197,18 @@ export function unwrapParentheses(node: ts.Expression) { } return node; } + +/** + * Shim to look up NodeFlags or ModifierFlags depending on the TypeScript + * version, emitting a runtime error if neither can be found. + */ +export function isCombinedFlagSet(node: ts.Node, name: string): boolean { + if (ts.ModifierFlags && name in ts.ModifierFlags) { + return isCombinedModifierFlagSet(node, ( ts.ModifierFlags)[name]); + } + if (ts.NodeFlags && name in ts.NodeFlags) { + return isCombinedNodeFlagSet(node, ( ts.NodeFlags)[name]); + } + + throw new Error(`Cannot find tag "${name}" in either ts.ModifierFlags or ts.NodeFlags`); +} diff --git a/src/rules/preferConstRule.ts b/src/rules/preferConstRule.ts index 44ffe4db12c..ec4b789582a 100644 --- a/src/rules/preferConstRule.ts +++ b/src/rules/preferConstRule.ts @@ -17,7 +17,12 @@ import * as ts from "typescript"; import * as Lint from "../index"; -import {isAssignment, isCombinedModifierFlagSet, isCombinedNodeFlagSet, unwrapParentheses} from "../language/utils"; +import { + isAssignment, + isCombinedFlagSet, + isCombinedNodeFlagSet, + unwrapParentheses +} from '../language/utils'; export class Rule extends Lint.Rules.AbstractRule { /* tslint:disable:object-literal-sort-keys */ @@ -54,7 +59,7 @@ class PreferConstWalker extends Lint.BlockScopeAwareRuleWalker<{}, ScopeInfo> { } private static collectInVariableDeclarationList(node: ts.VariableDeclarationList, scopeInfo: ScopeInfo) { - if (isCombinedNodeFlagSet(node, ts.NodeFlags.Let) && !isCombinedModifierFlagSet(node, ts.ModifierFlags.Export)) { + if (isCombinedNodeFlagSet(node, ts.NodeFlags.Let) && !isCombinedFlagSet(node, 'Export')) { for (const decl of node.declarations) { PreferConstWalker.addDeclarationName(decl.name, node, scopeInfo); }