1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const utils_1 = require("@typescript-eslint/utils");
|
4 | const getESLintCoreRule_1 = require("../util/getESLintCoreRule");
|
5 | const util_1 = require("../util");
|
6 | const baseRule = (0, getESLintCoreRule_1.getESLintCoreRule)('init-declarations');
|
7 | exports.default = (0, util_1.createRule)({
|
8 | name: 'init-declarations',
|
9 | meta: {
|
10 | type: 'suggestion',
|
11 | docs: {
|
12 | description: 'require or disallow initialization in variable declarations',
|
13 | recommended: false,
|
14 | extendsBaseRule: true,
|
15 | },
|
16 | hasSuggestions: baseRule.meta.hasSuggestions,
|
17 | schema: baseRule.meta.schema,
|
18 | messages: baseRule.meta.messages,
|
19 | },
|
20 | defaultOptions: ['always'],
|
21 | create(context, [mode]) {
|
22 | const rules = baseRule.create(context);
|
23 | return {
|
24 | 'VariableDeclaration:exit'(node) {
|
25 | if (mode === 'always') {
|
26 | if (node.declare) {
|
27 | return;
|
28 | }
|
29 | if (isAncestorNamespaceDeclared(node)) {
|
30 | return;
|
31 | }
|
32 | }
|
33 | rules['VariableDeclaration:exit'](node);
|
34 | },
|
35 | };
|
36 | function isAncestorNamespaceDeclared(node) {
|
37 | let ancestor = node.parent;
|
38 | while (ancestor) {
|
39 | if (ancestor.type === utils_1.AST_NODE_TYPES.TSModuleDeclaration &&
|
40 | ancestor.declare) {
|
41 | return true;
|
42 | }
|
43 | ancestor = ancestor.parent;
|
44 | }
|
45 | return false;
|
46 | }
|
47 | },
|
48 | });
|
49 |
|
\ | No newline at end of file |