|
19 | 19 |
|
20 | 20 | import {wrap} from 'trough' |
21 | 21 |
|
22 | | -const primitives = new Set(['string', 'number', 'boolean']) |
23 | | - |
24 | 22 | /** |
25 | 23 | * @param {string|RuleMeta} meta |
26 | 24 | * @param {Rule} rule |
@@ -80,54 +78,31 @@ export function lintRule(meta, rule) { |
80 | 78 | * @returns {SeverityTuple} |
81 | 79 | */ |
82 | 80 | function coerce(name, config) { |
| 81 | + if (!Array.isArray(config)) return [1, config] |
83 | 82 | /** @type {Array<unknown>} */ |
84 | | - let result |
85 | | - |
86 | | - if (config === null || config === undefined) { |
87 | | - result = [1] |
88 | | - } else if ( |
89 | | - Array.isArray(config) && |
90 | | - // `isArray(unknown)` is turned into `Array<any>`: |
91 | | - // type-coverage:ignore-next-line |
92 | | - primitives.has(typeof config[0]) |
93 | | - ) { |
94 | | - // `isArray(unknown)` is turned into `Array<any>`: |
95 | | - // type-coverage:ignore-next-line |
96 | | - result = [...config] |
97 | | - } else { |
98 | | - result = [1, config] |
99 | | - } |
100 | | - |
101 | | - let level = result[0] |
102 | | - |
103 | | - if (typeof level === 'boolean') { |
104 | | - level = level ? 1 : 0 |
105 | | - } else if (typeof level === 'string') { |
106 | | - if (level === 'off') { |
107 | | - level = 0 |
108 | | - } else if (level === 'on' || level === 'warn') { |
109 | | - level = 1 |
110 | | - } else if (level === 'error') { |
111 | | - level = 2 |
112 | | - } else { |
113 | | - level = 1 |
114 | | - result = [level, result] |
115 | | - } |
116 | | - } |
117 | | - |
118 | | - if (typeof level !== 'number' || level < 0 || level > 2) { |
119 | | - throw new Error( |
120 | | - 'Incorrect severity `' + |
121 | | - level + |
122 | | - '` for `' + |
123 | | - name + |
124 | | - '`, ' + |
125 | | - 'expected 0, 1, or 2' |
126 | | - ) |
| 83 | + const [severity, ...options] = config |
| 84 | + switch (severity) { |
| 85 | + case false: |
| 86 | + case 'off': |
| 87 | + case 0: |
| 88 | + return [0, ...options] |
| 89 | + case true: |
| 90 | + case 'on': |
| 91 | + case 'warn': |
| 92 | + case 1: |
| 93 | + return [1, ...options] |
| 94 | + case 'error': |
| 95 | + case 2: |
| 96 | + return [2, ...options] |
| 97 | + default: |
| 98 | + if (typeof severity !== 'number') return [1, config] |
| 99 | + throw new Error( |
| 100 | + 'Incorrect severity `' + |
| 101 | + severity + |
| 102 | + '` for `' + |
| 103 | + name + |
| 104 | + '`, ' + |
| 105 | + 'expected 0, 1, or 2' |
| 106 | + ) |
127 | 107 | } |
128 | | - |
129 | | - result[0] = level |
130 | | - |
131 | | - // @ts-expect-error: it’s now a valid tuple. |
132 | | - return result |
133 | 108 | } |
0 commit comments