Skip to content

Commit 51390e9

Browse files
authored
expiring-todo-comments: Fix partial version comparison (#2895)
1 parent 1cddfb5 commit 51390e9

2 files changed

Lines changed: 14 additions & 17 deletions

File tree

rules/expiring-todo-comments.js

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -256,11 +256,8 @@ function tryToCoerceVersion(rawVersion) {
256256
}
257257
}
258258

259-
function semverComparisonForOperator(operator) {
260-
return {
261-
'>': semver.gt,
262-
'>=': semver.gte,
263-
}[operator];
259+
function satisfiesRange(version, condition, range) {
260+
return semver.satisfies(version, `${condition}${range}`, {includePrerelease: true});
264261
}
265262

266263
const DEFAULT_OPTIONS = {
@@ -388,10 +385,7 @@ const create = context => {
388385
const [{condition, version}] = packageVersions;
389386

390387
const packageVersion = tryToCoerceVersion(packageJson.version);
391-
const decidedPackageVersion = tryToCoerceVersion(version);
392-
393-
const compare = semverComparisonForOperator(condition);
394-
if (packageVersion && compare(packageVersion, decidedPackageVersion)) {
388+
if (packageVersion && satisfiesRange(packageVersion, condition, version)) {
395389
context.report({
396390
loc: sourceCode.getLoc(comment),
397391
messageId: MESSAGE_ID_REACHED_PACKAGE_VERSION,
@@ -431,7 +425,6 @@ const create = context => {
431425
continue;
432426
}
433427

434-
const todoVersion = tryToCoerceVersion(dependency.version);
435428
const targetPackageVersion = tryToCoerceVersion(targetPackageRawVersion);
436429

437430
/* c8 ignore start */
@@ -441,9 +434,7 @@ const create = context => {
441434
}
442435
/* c8 ignore end */
443436

444-
const compare = semverComparisonForOperator(dependency.condition);
445-
446-
if (compare(targetPackageVersion, todoVersion)) {
437+
if (satisfiesRange(targetPackageVersion, dependency.condition, dependency.version)) {
447438
context.report({
448439
loc: sourceCode.getLoc(comment),
449440
messageId: MESSAGE_ID_VERSION_MATCHES,
@@ -468,14 +459,11 @@ const create = context => {
468459
continue;
469460
}
470461

471-
const todoEngine = tryToCoerceVersion(engine.version);
472462
const targetPackageEngineVersion = tryToCoerceVersion(
473463
targetPackageRawEngineVersion,
474464
);
475465

476-
const compare = semverComparisonForOperator(engine.condition);
477-
478-
if (compare(targetPackageEngineVersion, todoEngine)) {
466+
if (targetPackageEngineVersion && satisfiesRange(targetPackageEngineVersion, engine.condition, engine.version)) {
479467
context.report({
480468
loc: sourceCode.getLoc(comment),
481469
messageId: MESSAGE_ID_ENGINE_MATCHES,

test/expiring-todo-comments.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ test({
5959
},
6060
'// Expire Condition [2000-01-01]: new term name',
6161
'// TODO [>2000]: We sure didnt past this version',
62+
// Partial versions should use semver range semantics (#1132)
63+
// `>1` means `>=2.0.0`, not `>1.0.0`; `>63` means `>=64.0.0`, not `>63.0.0`
64+
'// TODO [>63]: package is 63.0.0 so >63 should not trigger',
65+
'// TODO [find-up-simple@>1]: find-up-simple is 1.0.1 so >1 should not trigger',
66+
'// TODO [engine:node@>20]: node engine is 20.x so >20 should not trigger',
6267
'// TODO [-find-up-simple]: We actually use this.',
6368
'// TODO [+popura]: I think we wont need a broken package.',
6469
'// TODO [semver@>1000]: Welp hopefully we wont get at that.',
@@ -256,6 +261,10 @@ test({
256261
code: '// TODO [@lubien/fixture-beta-package@>=1.0.0-beta.0]: when `@lubien/fixture-beta-package` version is >= 1.0.0-beta.0',
257262
errors: [versionMatchesError('@lubien/fixture-beta-package >= 1.0.0-beta.0', 'when `@lubien/fixture-beta-package` version is >= 1.0.0-beta.0')],
258263
},
264+
{
265+
code: '// TODO [@lubien/fixture-beta-package@>0.9]: when `@lubien/fixture-beta-package` prerelease version is > 0.9',
266+
errors: [versionMatchesError('@lubien/fixture-beta-package > 0.9', 'when `@lubien/fixture-beta-package` prerelease version is > 0.9')],
267+
},
259268
{
260269
code: '// TODO [semver>1]: Missing @.',
261270
errors: [missingAtSymbolError('semver>1', 'semver@>1', 'Missing @.')],

0 commit comments

Comments
 (0)