@md2do/cli 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/coverage/coverage-final.json +9 -9
- package/coverage/index.html +7 -7
- package/coverage/lcov-report/index.html +7 -7
- package/coverage/lcov-report/src/cli.ts.html +53 -5
- package/coverage/lcov-report/src/commands/index.html +5 -5
- package/coverage/lcov-report/src/commands/index.ts.html +1 -1
- package/coverage/lcov-report/src/commands/list.ts.html +49 -10
- package/coverage/lcov-report/src/commands/stats.ts.html +1 -1
- package/coverage/lcov-report/src/commands/todoist.ts.html +1 -1
- package/coverage/lcov-report/src/formatters/index.html +1 -1
- package/coverage/lcov-report/src/formatters/json.ts.html +1 -1
- package/coverage/lcov-report/src/formatters/pretty.ts.html +1 -1
- package/coverage/lcov-report/src/index.html +5 -5
- package/coverage/lcov-report/src/index.ts.html +1 -1
- package/coverage/lcov-report/src/scanner.ts.html +1 -1
- package/coverage/lcov.info +31 -2
- package/coverage/src/cli.ts.html +53 -5
- package/coverage/src/commands/index.html +5 -5
- package/coverage/src/commands/index.ts.html +1 -1
- package/coverage/src/commands/list.ts.html +49 -10
- package/coverage/src/commands/stats.ts.html +1 -1
- package/coverage/src/commands/todoist.ts.html +1 -1
- package/coverage/src/formatters/index.html +1 -1
- package/coverage/src/formatters/json.ts.html +1 -1
- package/coverage/src/formatters/pretty.ts.html +1 -1
- package/coverage/src/index.html +5 -5
- package/coverage/src/index.ts.html +1 -1
- package/coverage/src/scanner.ts.html +1 -1
- package/dist/cli.js +34 -18
- package/dist/index.js +34 -18
- package/package.json +5 -5
- package/src/commands/list.ts +41 -12
- package/src/scanner.ts +6 -1
- package/tests/e2e/__snapshots__/warnings.test.ts.snap +104 -0
- package/tests/e2e/warnings.test.ts +186 -0
package/coverage/src/cli.ts.html
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">0% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>0/
|
|
28
|
+
<span class='fraction'>0/42</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">0% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>0/
|
|
49
|
+
<span class='fraction'>0/42</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -89,7 +89,39 @@
|
|
|
89
89
|
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
90
|
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
91
|
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
-
<a name='L27'></a><a href='#L27'>27</a
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
109
|
+
<span class="cline-any cline-no"> </span>
|
|
110
|
+
<span class="cline-any cline-no"> </span>
|
|
111
|
+
<span class="cline-any cline-no"> </span>
|
|
112
|
+
<span class="cline-any cline-no"> </span>
|
|
113
|
+
<span class="cline-any cline-no"> </span>
|
|
114
|
+
<span class="cline-any cline-no"> </span>
|
|
115
|
+
<span class="cline-any cline-no"> </span>
|
|
116
|
+
<span class="cline-any cline-no"> </span>
|
|
117
|
+
<span class="cline-any cline-no"> </span>
|
|
118
|
+
<span class="cline-any cline-no"> </span>
|
|
119
|
+
<span class="cline-any cline-no"> </span>
|
|
120
|
+
<span class="cline-any cline-no"> </span>
|
|
121
|
+
<span class="cline-any cline-no"> </span>
|
|
122
|
+
<span class="cline-any cline-no"> </span>
|
|
123
|
+
<span class="cline-any cline-no"> </span>
|
|
124
|
+
<span class="cline-any cline-no"> </span>
|
|
93
125
|
<span class="cline-any cline-no"> </span>
|
|
94
126
|
<span class="cline-any cline-no"> </span>
|
|
95
127
|
<span class="cline-any cline-no"> </span>
|
|
@@ -117,18 +149,34 @@
|
|
|
117
149
|
<span class="cline-any cline-no"> </span>
|
|
118
150
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >#!/usr/bin/env node</span></span></span>
|
|
119
151
|
<span class="cstat-no" title="statement not covered" >import { Command } from 'commander';</span>
|
|
152
|
+
<span class="cstat-no" title="statement not covered" >import { readFileSync } from 'fs';</span>
|
|
153
|
+
<span class="cstat-no" title="statement not covered" >import { join } from 'path';</span>
|
|
120
154
|
<span class="cstat-no" title="statement not covered" >import {</span>
|
|
121
155
|
<span class="cstat-no" title="statement not covered" > createListCommand,</span>
|
|
122
156
|
<span class="cstat-no" title="statement not covered" > createStatsCommand,</span>
|
|
123
157
|
<span class="cstat-no" title="statement not covered" > createTodoistCommand,</span>
|
|
124
158
|
<span class="cstat-no" title="statement not covered" >} from './commands/index.js';</span>
|
|
125
159
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
160
|
+
<span class="cstat-no" title="statement not covered" >// Read version from package.json</span>
|
|
161
|
+
<span class="cstat-no" title="statement not covered" >// __dirname will be available in the compiled CJS output</span>
|
|
162
|
+
<span class="cstat-no" title="statement not covered" >const getVersion = (): string => {</span>
|
|
163
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
164
|
+
<span class="cstat-no" title="statement not covered" > const packagePath = join(__dirname, '../package.json');</span>
|
|
165
|
+
<span class="cstat-no" title="statement not covered" > const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8')) as {</span>
|
|
166
|
+
<span class="cstat-no" title="statement not covered" > version: string;</span>
|
|
167
|
+
<span class="cstat-no" title="statement not covered" > };</span>
|
|
168
|
+
<span class="cstat-no" title="statement not covered" > return packageJson.version;</span>
|
|
169
|
+
<span class="cstat-no" title="statement not covered" > } catch {</span>
|
|
170
|
+
<span class="cstat-no" title="statement not covered" > return '0.0.0';</span>
|
|
171
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
172
|
+
<span class="cstat-no" title="statement not covered" >};</span>
|
|
173
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
126
174
|
<span class="cstat-no" title="statement not covered" >const program = new Command();</span>
|
|
127
175
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
128
176
|
<span class="cstat-no" title="statement not covered" >program</span>
|
|
129
177
|
<span class="cstat-no" title="statement not covered" > .name('md2do')</span>
|
|
130
178
|
<span class="cstat-no" title="statement not covered" > .description('Scan and manage TODOs in markdown files')</span>
|
|
131
|
-
<span class="cstat-no" title="statement not covered" > .version(
|
|
179
|
+
<span class="cstat-no" title="statement not covered" > .version(getVersion());</span>
|
|
132
180
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
133
181
|
<span class="cstat-no" title="statement not covered" >// Add commands</span>
|
|
134
182
|
<span class="cstat-no" title="statement not covered" >program.addCommand(createListCommand());</span>
|
|
@@ -148,7 +196,7 @@
|
|
|
148
196
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
149
197
|
Code coverage generated by
|
|
150
198
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
151
|
-
at 2026-01-
|
|
199
|
+
at 2026-01-26T03:50:54.693Z
|
|
152
200
|
</div>
|
|
153
201
|
<script src="../prettify.js"></script>
|
|
154
202
|
<script>
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">0% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>0/
|
|
28
|
+
<span class='fraction'>0/1375</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">0% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>0/
|
|
49
|
+
<span class='fraction'>0/1375</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -99,13 +99,13 @@
|
|
|
99
99
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
100
100
|
</td>
|
|
101
101
|
<td data-value="0" class="pct low">0%</td>
|
|
102
|
-
<td data-value="
|
|
102
|
+
<td data-value="244" class="abs low">0/244</td>
|
|
103
103
|
<td data-value="0" class="pct low">0%</td>
|
|
104
104
|
<td data-value="1" class="abs low">0/1</td>
|
|
105
105
|
<td data-value="0" class="pct low">0%</td>
|
|
106
106
|
<td data-value="1" class="abs low">0/1</td>
|
|
107
107
|
<td data-value="0" class="pct low">0%</td>
|
|
108
|
-
<td data-value="
|
|
108
|
+
<td data-value="244" class="abs low">0/244</td>
|
|
109
109
|
</tr>
|
|
110
110
|
|
|
111
111
|
<tr>
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
147
147
|
Code coverage generated by
|
|
148
148
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
149
|
-
at 2026-01-
|
|
149
|
+
at 2026-01-26T03:50:54.693Z
|
|
150
150
|
</div>
|
|
151
151
|
<script src="../../prettify.js"></script>
|
|
152
152
|
<script>
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
83
83
|
Code coverage generated by
|
|
84
84
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
85
|
-
at 2026-01-
|
|
85
|
+
at 2026-01-26T03:50:54.693Z
|
|
86
86
|
</div>
|
|
87
87
|
<script src="../../prettify.js"></script>
|
|
88
88
|
<script>
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">0% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>0/
|
|
28
|
+
<span class='fraction'>0/244</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">0% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>0/
|
|
49
|
+
<span class='fraction'>0/244</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -294,7 +294,33 @@
|
|
|
294
294
|
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
295
|
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
296
|
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
-
<a name='L232'></a><a href='#L232'>232</a
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
311
|
+
<span class="cline-any cline-no"> </span>
|
|
312
|
+
<span class="cline-any cline-no"> </span>
|
|
313
|
+
<span class="cline-any cline-no"> </span>
|
|
314
|
+
<span class="cline-any cline-no"> </span>
|
|
315
|
+
<span class="cline-any cline-no"> </span>
|
|
316
|
+
<span class="cline-any cline-no"> </span>
|
|
317
|
+
<span class="cline-any cline-no"> </span>
|
|
318
|
+
<span class="cline-any cline-no"> </span>
|
|
319
|
+
<span class="cline-any cline-no"> </span>
|
|
320
|
+
<span class="cline-any cline-no"> </span>
|
|
321
|
+
<span class="cline-any cline-no"> </span>
|
|
322
|
+
<span class="cline-any cline-no"> </span>
|
|
323
|
+
<span class="cline-any cline-no"> </span>
|
|
298
324
|
<span class="cline-any cline-no"> </span>
|
|
299
325
|
<span class="cline-any cline-no"> </span>
|
|
300
326
|
<span class="cline-any cline-no"> </span>
|
|
@@ -552,6 +578,8 @@
|
|
|
552
578
|
<span class="cstat-no" title="statement not covered" > colors?: boolean;</span>
|
|
553
579
|
<span class="cstat-no" title="statement not covered" > paths?: boolean;</span>
|
|
554
580
|
<span class="cstat-no" title="statement not covered" > context?: boolean;</span>
|
|
581
|
+
<span class="cstat-no" title="statement not covered" > warnings?: boolean;</span>
|
|
582
|
+
<span class="cstat-no" title="statement not covered" > allWarnings?: boolean;</span>
|
|
555
583
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
556
584
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
557
585
|
<span class="cstat-no" title="statement not covered" >export function createListCommand(): Command {</span>
|
|
@@ -604,6 +632,10 @@
|
|
|
604
632
|
<span class="cstat-no" title="statement not covered" > .option('--no-paths', 'Hide file paths')</span>
|
|
605
633
|
<span class="cstat-no" title="statement not covered" > .option('--context', 'Show context information (project, person, heading)')</span>
|
|
606
634
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
635
|
+
<span class="cstat-no" title="statement not covered" > // Warning options</span>
|
|
636
|
+
<span class="cstat-no" title="statement not covered" > .option('--no-warnings', 'Hide all warnings')</span>
|
|
637
|
+
<span class="cstat-no" title="statement not covered" > .option('--all-warnings', 'Show all warnings (default shows first 5)')</span>
|
|
638
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
607
639
|
<span class="cstat-no" title="statement not covered" > .action(async (options: ListCommandOptions) => {</span>
|
|
608
640
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
609
641
|
<span class="cstat-no" title="statement not covered" > // Scan markdown files</span>
|
|
@@ -732,19 +764,26 @@
|
|
|
732
764
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
733
765
|
<span class="cstat-no" title="statement not covered" > console.log(output);</span>
|
|
734
766
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
735
|
-
<span class="cstat-no" title="statement not covered" > // Show warnings if any</span>
|
|
736
|
-
<span class="cstat-no" title="statement not covered" > if (scanResult.warnings.length > 0) {</span>
|
|
767
|
+
<span class="cstat-no" title="statement not covered" > // Show warnings if any (unless --no-warnings)</span>
|
|
768
|
+
<span class="cstat-no" title="statement not covered" > if (options.warnings !== false && scanResult.warnings.length > 0) {</span>
|
|
737
769
|
<span class="cstat-no" title="statement not covered" > console.error(</span>
|
|
738
|
-
<span class="cstat-no" title="statement not covered" > `\n⚠️ ${scanResult.warnings.length} warnings encountered during scanning`,</span>
|
|
770
|
+
<span class="cstat-no" title="statement not covered" > `\n⚠️ ${scanResult.warnings.length} warning${scanResult.warnings.length > 1 ? 's' : ''} encountered during scanning`,</span>
|
|
739
771
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
740
|
-
<span class="cstat-no" title="statement not covered"
|
|
772
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
773
|
+
<span class="cstat-no" title="statement not covered" > // Show all warnings if --all-warnings, otherwise show first 5</span>
|
|
774
|
+
<span class="cstat-no" title="statement not covered" > const warningsToShow = options.allWarnings</span>
|
|
775
|
+
<span class="cstat-no" title="statement not covered" > ? scanResult.warnings</span>
|
|
776
|
+
<span class="cstat-no" title="statement not covered" > : scanResult.warnings.slice(0, 5);</span>
|
|
777
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
778
|
+
<span class="cstat-no" title="statement not covered" > for (const warning of warningsToShow) {</span>
|
|
741
779
|
<span class="cstat-no" title="statement not covered" > console.error(</span>
|
|
742
780
|
<span class="cstat-no" title="statement not covered" > ` ${warning.file}:${warning.line} - ${warning.reason}`,</span>
|
|
743
781
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
744
782
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
745
|
-
<span class="cstat-no" title="statement not covered"
|
|
783
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
784
|
+
<span class="cstat-no" title="statement not covered" > if (!options.allWarnings && scanResult.warnings.length > 5) {</span>
|
|
746
785
|
<span class="cstat-no" title="statement not covered" > console.error(</span>
|
|
747
|
-
<span class="cstat-no" title="statement not covered" > ` ... and ${scanResult.warnings.length - 5} more warnings`,</span>
|
|
786
|
+
<span class="cstat-no" title="statement not covered" > ` ... and ${scanResult.warnings.length - 5} more warning${scanResult.warnings.length - 5 > 1 ? 's' : ''} (use --all-warnings to see all)`,</span>
|
|
748
787
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
749
788
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
750
789
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
@@ -763,7 +802,7 @@
|
|
|
763
802
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
764
803
|
Code coverage generated by
|
|
765
804
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
766
|
-
at 2026-01-
|
|
805
|
+
at 2026-01-26T03:50:54.693Z
|
|
767
806
|
</div>
|
|
768
807
|
<script src="../../prettify.js"></script>
|
|
769
808
|
<script>
|
|
@@ -1153,7 +1153,7 @@
|
|
|
1153
1153
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1154
1154
|
Code coverage generated by
|
|
1155
1155
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1156
|
-
at 2026-01-
|
|
1156
|
+
at 2026-01-26T03:50:54.693Z
|
|
1157
1157
|
</div>
|
|
1158
1158
|
<script src="../../prettify.js"></script>
|
|
1159
1159
|
<script>
|
|
@@ -2368,7 +2368,7 @@
|
|
|
2368
2368
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2369
2369
|
Code coverage generated by
|
|
2370
2370
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2371
|
-
at 2026-01-
|
|
2371
|
+
at 2026-01-26T03:50:54.693Z
|
|
2372
2372
|
</div>
|
|
2373
2373
|
<script src="../../prettify.js"></script>
|
|
2374
2374
|
<script>
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
117
117
|
Code coverage generated by
|
|
118
118
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
119
|
-
at 2026-01-
|
|
119
|
+
at 2026-01-26T03:50:54.693Z
|
|
120
120
|
</div>
|
|
121
121
|
<script src="../../prettify.js"></script>
|
|
122
122
|
<script>
|
|
@@ -265,7 +265,7 @@
|
|
|
265
265
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
266
266
|
Code coverage generated by
|
|
267
267
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
268
|
-
at 2026-01-
|
|
268
|
+
at 2026-01-26T03:50:54.693Z
|
|
269
269
|
</div>
|
|
270
270
|
<script src="../../prettify.js"></script>
|
|
271
271
|
<script>
|
|
@@ -940,7 +940,7 @@
|
|
|
940
940
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
941
941
|
Code coverage generated by
|
|
942
942
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
943
|
-
at 2026-01-
|
|
943
|
+
at 2026-01-26T03:50:54.693Z
|
|
944
944
|
</div>
|
|
945
945
|
<script src="../../prettify.js"></script>
|
|
946
946
|
<script>
|
package/coverage/src/index.html
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">0% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>0/
|
|
28
|
+
<span class='fraction'>0/149</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">0% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>0/
|
|
49
|
+
<span class='fraction'>0/149</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -84,13 +84,13 @@
|
|
|
84
84
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
85
85
|
</td>
|
|
86
86
|
<td data-value="0" class="pct low">0%</td>
|
|
87
|
-
<td data-value="
|
|
87
|
+
<td data-value="42" class="abs low">0/42</td>
|
|
88
88
|
<td data-value="0" class="pct low">0%</td>
|
|
89
89
|
<td data-value="1" class="abs low">0/1</td>
|
|
90
90
|
<td data-value="0" class="pct low">0%</td>
|
|
91
91
|
<td data-value="1" class="abs low">0/1</td>
|
|
92
92
|
<td data-value="0" class="pct low">0%</td>
|
|
93
|
-
<td data-value="
|
|
93
|
+
<td data-value="42" class="abs low">0/42</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
132
132
|
Code coverage generated by
|
|
133
133
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
134
|
-
at 2026-01-
|
|
134
|
+
at 2026-01-26T03:50:54.693Z
|
|
135
135
|
</div>
|
|
136
136
|
<script src="../prettify.js"></script>
|
|
137
137
|
<script>
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
77
77
|
Code coverage generated by
|
|
78
78
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
79
|
-
at 2026-01-
|
|
79
|
+
at 2026-01-26T03:50:54.693Z
|
|
80
80
|
</div>
|
|
81
81
|
<script src="../prettify.js"></script>
|
|
82
82
|
<script>
|
|
@@ -385,7 +385,7 @@
|
|
|
385
385
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
386
386
|
Code coverage generated by
|
|
387
387
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
388
|
-
at 2026-01-
|
|
388
|
+
at 2026-01-26T03:50:54.693Z
|
|
389
389
|
</div>
|
|
390
390
|
<script src="../prettify.js"></script>
|
|
391
391
|
<script>
|
package/dist/cli.js
CHANGED
|
@@ -31,6 +31,7 @@ var import_path = require("path");
|
|
|
31
31
|
// src/commands/list.ts
|
|
32
32
|
var import_commander = require("commander");
|
|
33
33
|
var import_core2 = require("@md2do/core");
|
|
34
|
+
var import_config = require("@md2do/config");
|
|
34
35
|
|
|
35
36
|
// src/scanner.ts
|
|
36
37
|
var import_promises = require("fs/promises");
|
|
@@ -68,11 +69,16 @@ async function scanMarkdownFiles(options = {}) {
|
|
|
68
69
|
allTasks.push(...result.tasks);
|
|
69
70
|
allWarnings.push(...result.warnings);
|
|
70
71
|
} catch (error) {
|
|
72
|
+
const message = `Failed to read file: ${error instanceof Error ? error.message : "Unknown error"}`;
|
|
71
73
|
allWarnings.push({
|
|
74
|
+
severity: "error",
|
|
75
|
+
source: "md2do",
|
|
76
|
+
ruleId: "file-read-error",
|
|
72
77
|
file,
|
|
73
78
|
line: 0,
|
|
74
79
|
text: "",
|
|
75
|
-
|
|
80
|
+
message,
|
|
81
|
+
reason: message
|
|
76
82
|
});
|
|
77
83
|
}
|
|
78
84
|
}
|
|
@@ -291,7 +297,7 @@ function createListCommand() {
|
|
|
291
297
|
"-f, --format <type>",
|
|
292
298
|
"Output format (pretty|table|json)",
|
|
293
299
|
"pretty"
|
|
294
|
-
).option("--no-colors", "Disable colors in output").option("--no-paths", "Hide file paths").option("--context", "Show context information (project, person, heading)").action(async (options) => {
|
|
300
|
+
).option("--no-colors", "Disable colors in output").option("--no-paths", "Hide file paths").option("--context", "Show context information (project, person, heading)").option("--no-warnings", "Hide all warnings").option("--all-warnings", "Show all warnings (default shows first 5)").action(async (options) => {
|
|
295
301
|
try {
|
|
296
302
|
const scanResult = await scanMarkdownFiles({
|
|
297
303
|
root: options.path || process.cwd(),
|
|
@@ -388,20 +394,30 @@ function createListCommand() {
|
|
|
388
394
|
break;
|
|
389
395
|
}
|
|
390
396
|
console.log(output);
|
|
391
|
-
if (
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
397
|
+
if (options.warnings !== false) {
|
|
398
|
+
const config = await (0, import_config.loadConfig)({
|
|
399
|
+
cwd: options.path || process.cwd()
|
|
400
|
+
});
|
|
401
|
+
const warningConfig = config.warnings ?? import_config.DEFAULT_CONFIG.warnings;
|
|
402
|
+
const filteredWarnings = (0, import_core2.filterWarnings)(
|
|
403
|
+
scanResult.warnings,
|
|
404
|
+
warningConfig ?? {}
|
|
395
405
|
);
|
|
396
|
-
|
|
397
|
-
console.error(
|
|
398
|
-
` ${warning.file}:${warning.line} - ${warning.reason}`
|
|
399
|
-
);
|
|
400
|
-
}
|
|
401
|
-
if (scanResult.warnings.length > 5) {
|
|
406
|
+
if (filteredWarnings.length > 0) {
|
|
402
407
|
console.error(
|
|
403
|
-
`
|
|
408
|
+
`
|
|
409
|
+
\u26A0\uFE0F ${filteredWarnings.length} warning${filteredWarnings.length > 1 ? "s" : ""} encountered during scanning`
|
|
404
410
|
);
|
|
411
|
+
const warningsToShow = options.allWarnings ? filteredWarnings : filteredWarnings.slice(0, 5);
|
|
412
|
+
for (const warning of warningsToShow) {
|
|
413
|
+
const message = warning.message || warning.reason || "Unknown warning";
|
|
414
|
+
console.error(` ${warning.file}:${warning.line} - ${message}`);
|
|
415
|
+
}
|
|
416
|
+
if (!options.allWarnings && filteredWarnings.length > 5) {
|
|
417
|
+
console.error(
|
|
418
|
+
` ... and ${filteredWarnings.length - 5} more warning${filteredWarnings.length - 5 > 1 ? "s" : ""} (use --all-warnings to see all)`
|
|
419
|
+
);
|
|
420
|
+
}
|
|
405
421
|
}
|
|
406
422
|
}
|
|
407
423
|
} catch (error) {
|
|
@@ -651,7 +667,7 @@ function capitalize(str) {
|
|
|
651
667
|
|
|
652
668
|
// src/commands/todoist.ts
|
|
653
669
|
var import_commander3 = require("commander");
|
|
654
|
-
var
|
|
670
|
+
var import_config2 = require("@md2do/config");
|
|
655
671
|
var import_todoist = require("@md2do/todoist");
|
|
656
672
|
var import_core4 = require("@md2do/core");
|
|
657
673
|
var import_promises2 = __toESM(require("fs/promises"));
|
|
@@ -680,7 +696,7 @@ function createTodoistListCommand() {
|
|
|
680
696
|
return command;
|
|
681
697
|
}
|
|
682
698
|
async function todoistListAction(options) {
|
|
683
|
-
const config = await (0,
|
|
699
|
+
const config = await (0, import_config2.loadConfig)();
|
|
684
700
|
if (!config.todoist?.apiToken) {
|
|
685
701
|
console.error("\u274C Error: Todoist API token not configured");
|
|
686
702
|
console.error("");
|
|
@@ -811,7 +827,7 @@ function createTodoistAddCommand() {
|
|
|
811
827
|
return command;
|
|
812
828
|
}
|
|
813
829
|
async function todoistAddAction(taskContent, options) {
|
|
814
|
-
const config = await (0,
|
|
830
|
+
const config = await (0, import_config2.loadConfig)();
|
|
815
831
|
if (!config.todoist?.apiToken) {
|
|
816
832
|
console.error("\u274C Error: Todoist API token not configured");
|
|
817
833
|
console.error("");
|
|
@@ -904,7 +920,7 @@ async function todoistImportAction(location, options) {
|
|
|
904
920
|
console.error(`\u274C Error: Invalid line number: ${lineStr}`);
|
|
905
921
|
process.exit(1);
|
|
906
922
|
}
|
|
907
|
-
const config = await (0,
|
|
923
|
+
const config = await (0, import_config2.loadConfig)();
|
|
908
924
|
if (!config.todoist?.apiToken) {
|
|
909
925
|
console.error("\u274C Error: Todoist API token not configured");
|
|
910
926
|
console.error("");
|
|
@@ -1018,7 +1034,7 @@ function createTodoistSyncCommand() {
|
|
|
1018
1034
|
return command;
|
|
1019
1035
|
}
|
|
1020
1036
|
async function todoistSyncAction(options) {
|
|
1021
|
-
const config = await (0,
|
|
1037
|
+
const config = await (0, import_config2.loadConfig)();
|
|
1022
1038
|
if (!config.todoist?.apiToken) {
|
|
1023
1039
|
console.error("\u274C Error: Todoist API token not configured");
|
|
1024
1040
|
console.error("");
|
package/dist/index.js
CHANGED
|
@@ -39,6 +39,7 @@ module.exports = __toCommonJS(index_exports);
|
|
|
39
39
|
// src/commands/list.ts
|
|
40
40
|
var import_commander = require("commander");
|
|
41
41
|
var import_core2 = require("@md2do/core");
|
|
42
|
+
var import_config = require("@md2do/config");
|
|
42
43
|
|
|
43
44
|
// src/scanner.ts
|
|
44
45
|
var import_promises = require("fs/promises");
|
|
@@ -76,11 +77,16 @@ async function scanMarkdownFiles(options = {}) {
|
|
|
76
77
|
allTasks.push(...result.tasks);
|
|
77
78
|
allWarnings.push(...result.warnings);
|
|
78
79
|
} catch (error) {
|
|
80
|
+
const message = `Failed to read file: ${error instanceof Error ? error.message : "Unknown error"}`;
|
|
79
81
|
allWarnings.push({
|
|
82
|
+
severity: "error",
|
|
83
|
+
source: "md2do",
|
|
84
|
+
ruleId: "file-read-error",
|
|
80
85
|
file,
|
|
81
86
|
line: 0,
|
|
82
87
|
text: "",
|
|
83
|
-
|
|
88
|
+
message,
|
|
89
|
+
reason: message
|
|
84
90
|
});
|
|
85
91
|
}
|
|
86
92
|
}
|
|
@@ -299,7 +305,7 @@ function createListCommand() {
|
|
|
299
305
|
"-f, --format <type>",
|
|
300
306
|
"Output format (pretty|table|json)",
|
|
301
307
|
"pretty"
|
|
302
|
-
).option("--no-colors", "Disable colors in output").option("--no-paths", "Hide file paths").option("--context", "Show context information (project, person, heading)").action(async (options) => {
|
|
308
|
+
).option("--no-colors", "Disable colors in output").option("--no-paths", "Hide file paths").option("--context", "Show context information (project, person, heading)").option("--no-warnings", "Hide all warnings").option("--all-warnings", "Show all warnings (default shows first 5)").action(async (options) => {
|
|
303
309
|
try {
|
|
304
310
|
const scanResult = await scanMarkdownFiles({
|
|
305
311
|
root: options.path || process.cwd(),
|
|
@@ -396,20 +402,30 @@ function createListCommand() {
|
|
|
396
402
|
break;
|
|
397
403
|
}
|
|
398
404
|
console.log(output);
|
|
399
|
-
if (
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
405
|
+
if (options.warnings !== false) {
|
|
406
|
+
const config = await (0, import_config.loadConfig)({
|
|
407
|
+
cwd: options.path || process.cwd()
|
|
408
|
+
});
|
|
409
|
+
const warningConfig = config.warnings ?? import_config.DEFAULT_CONFIG.warnings;
|
|
410
|
+
const filteredWarnings = (0, import_core2.filterWarnings)(
|
|
411
|
+
scanResult.warnings,
|
|
412
|
+
warningConfig ?? {}
|
|
403
413
|
);
|
|
404
|
-
|
|
405
|
-
console.error(
|
|
406
|
-
` ${warning.file}:${warning.line} - ${warning.reason}`
|
|
407
|
-
);
|
|
408
|
-
}
|
|
409
|
-
if (scanResult.warnings.length > 5) {
|
|
414
|
+
if (filteredWarnings.length > 0) {
|
|
410
415
|
console.error(
|
|
411
|
-
`
|
|
416
|
+
`
|
|
417
|
+
\u26A0\uFE0F ${filteredWarnings.length} warning${filteredWarnings.length > 1 ? "s" : ""} encountered during scanning`
|
|
412
418
|
);
|
|
419
|
+
const warningsToShow = options.allWarnings ? filteredWarnings : filteredWarnings.slice(0, 5);
|
|
420
|
+
for (const warning of warningsToShow) {
|
|
421
|
+
const message = warning.message || warning.reason || "Unknown warning";
|
|
422
|
+
console.error(` ${warning.file}:${warning.line} - ${message}`);
|
|
423
|
+
}
|
|
424
|
+
if (!options.allWarnings && filteredWarnings.length > 5) {
|
|
425
|
+
console.error(
|
|
426
|
+
` ... and ${filteredWarnings.length - 5} more warning${filteredWarnings.length - 5 > 1 ? "s" : ""} (use --all-warnings to see all)`
|
|
427
|
+
);
|
|
428
|
+
}
|
|
413
429
|
}
|
|
414
430
|
}
|
|
415
431
|
} catch (error) {
|
|
@@ -659,7 +675,7 @@ function capitalize(str) {
|
|
|
659
675
|
|
|
660
676
|
// src/commands/todoist.ts
|
|
661
677
|
var import_commander3 = require("commander");
|
|
662
|
-
var
|
|
678
|
+
var import_config2 = require("@md2do/config");
|
|
663
679
|
var import_todoist = require("@md2do/todoist");
|
|
664
680
|
var import_core4 = require("@md2do/core");
|
|
665
681
|
var import_promises2 = __toESM(require("fs/promises"));
|
|
@@ -688,7 +704,7 @@ function createTodoistListCommand() {
|
|
|
688
704
|
return command;
|
|
689
705
|
}
|
|
690
706
|
async function todoistListAction(options) {
|
|
691
|
-
const config = await (0,
|
|
707
|
+
const config = await (0, import_config2.loadConfig)();
|
|
692
708
|
if (!config.todoist?.apiToken) {
|
|
693
709
|
console.error("\u274C Error: Todoist API token not configured");
|
|
694
710
|
console.error("");
|
|
@@ -819,7 +835,7 @@ function createTodoistAddCommand() {
|
|
|
819
835
|
return command;
|
|
820
836
|
}
|
|
821
837
|
async function todoistAddAction(taskContent, options) {
|
|
822
|
-
const config = await (0,
|
|
838
|
+
const config = await (0, import_config2.loadConfig)();
|
|
823
839
|
if (!config.todoist?.apiToken) {
|
|
824
840
|
console.error("\u274C Error: Todoist API token not configured");
|
|
825
841
|
console.error("");
|
|
@@ -912,7 +928,7 @@ async function todoistImportAction(location, options) {
|
|
|
912
928
|
console.error(`\u274C Error: Invalid line number: ${lineStr}`);
|
|
913
929
|
process.exit(1);
|
|
914
930
|
}
|
|
915
|
-
const config = await (0,
|
|
931
|
+
const config = await (0, import_config2.loadConfig)();
|
|
916
932
|
if (!config.todoist?.apiToken) {
|
|
917
933
|
console.error("\u274C Error: Todoist API token not configured");
|
|
918
934
|
console.error("");
|
|
@@ -1026,7 +1042,7 @@ function createTodoistSyncCommand() {
|
|
|
1026
1042
|
return command;
|
|
1027
1043
|
}
|
|
1028
1044
|
async function todoistSyncAction(options) {
|
|
1029
|
-
const config = await (0,
|
|
1045
|
+
const config = await (0, import_config2.loadConfig)();
|
|
1030
1046
|
if (!config.todoist?.apiToken) {
|
|
1031
1047
|
console.error("\u274C Error: Todoist API token not configured");
|
|
1032
1048
|
console.error("");
|