@sarj/eslint-plugin 15.6.3 → 15.6.4

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/dist/index.cjs CHANGED
@@ -1054,20 +1054,20 @@ var noCommentCruftDocumentation = {
1054
1054
  ],
1055
1055
  examples: [
1056
1056
  {
1057
- id: "rationale-comment",
1058
- title: "A comment explains why retry is required",
1057
+ id: "owned-context",
1058
+ title: "A reference records why the counter changes",
1059
1059
  outcome: "no-match",
1060
- files: [{ path: "src/retry.ts", source: "// retry because the upstream API is flaky\nconst x = retry();" }],
1061
- focusPath: "src/retry.ts",
1060
+ files: [{ path: "src/counter.ts", source: "// increment the counter for PLT-812\ncounter += 1;" }],
1061
+ focusPath: "src/counter.ts",
1062
1062
  expectedCount: 0,
1063
1063
  public: true
1064
1064
  },
1065
1065
  {
1066
- id: "region-banner",
1067
- title: "A region comment decorates a code boundary",
1066
+ id: "redundant-narration",
1067
+ title: "A comment repeats the statement below",
1068
1068
  outcome: "match",
1069
- files: [{ path: "src/helpers.ts", source: "const x = 1;\n// region helpers\nconst y = 2;" }],
1070
- focusPath: "src/helpers.ts",
1069
+ files: [{ path: "src/counter.ts", source: "// increment the counter\ncounter += 1;" }],
1070
+ focusPath: "src/counter.ts",
1071
1071
  expectedCount: 1,
1072
1072
  public: true
1073
1073
  }
@@ -4201,8 +4201,51 @@ var noLongCommentDocumentation = {
4201
4201
  category: "maintainability",
4202
4202
  limitations: ["Only JSDoc blocks are inspected; structured API docs, tests, scripts, generated files, and versioned dependencies are excluded."],
4203
4203
  examples: [
4204
- { id: "local-fact", title: "Keep a concise local fact", outcome: "no-match", files: [{ path: "src/cache.ts", source: "// The cache is process local.\nconst cache = new Map();" }], focusPath: "src/cache.ts", expectedCount: 0, public: true },
4205
- { id: "prose-wall", title: "Avoid an unstructured prose wall", outcome: "match", files: [{ path: "src/chart.ts", source: "/** One. Two. Three. Four. Five. Six. Seven. Eight. */\nconst chart = createChart();" }], focusPath: "src/chart.ts", expectedCount: 1, public: true }
4204
+ {
4205
+ id: "structured-jsdoc",
4206
+ title: "Paragraphs separate a component's durable constraints",
4207
+ outcome: "no-match",
4208
+ files: [{
4209
+ path: "src/composer.ts",
4210
+ source: [
4211
+ "/**",
4212
+ " * Shared composer.",
4213
+ " *",
4214
+ " * It serves the room. It serves task comments. It stays visually calm. It accepts attachments.",
4215
+ " *",
4216
+ " * The `tone` prop supplies task styling. The `leadingTools` prop supplies controls.",
4217
+ " * The parent owns uploads. The component owns focus.",
4218
+ " */",
4219
+ "",
4220
+ "export const Composer = forwardRef(function Composer() { return null; });"
4221
+ ].join("\n")
4222
+ }],
4223
+ focusPath: "src/composer.ts",
4224
+ expectedCount: 0,
4225
+ public: true
4226
+ },
4227
+ {
4228
+ id: "prose-wall",
4229
+ title: "One paragraph narrates a chart's design history",
4230
+ outcome: "match",
4231
+ files: [{
4232
+ path: "src/chart.ts",
4233
+ source: `/**
4234
+ * The ports chart shows arrivals and departures across the network.
4235
+ * It was originally a line chart, but the lines crossed too often.
4236
+ * Bars make adjacent ports easier to compare at a glance.
4237
+ * The axis starts at zero so visual differences stay proportional.
4238
+ * A single series uses the site navy for brand consistency.
4239
+ * Empty ports use a neutral ink so missing traffic remains visible.
4240
+ * Tooltip values repeat the units shown on the vertical axis.
4241
+ * The chart intentionally keeps labels horizontal on wide screens.
4242
+ */
4243
+ export function PortBars() { return null; }`
4244
+ }],
4245
+ focusPath: "src/chart.ts",
4246
+ expectedCount: 1,
4247
+ public: true
4248
+ }
4206
4249
  ]
4207
4250
  };
4208
4251
  var EXCESSIVE_SENTENCE_COUNT = 8;
@@ -7486,10 +7529,10 @@ var noTypedDocSectionsDocumentation = {
7486
7529
  public: true
7487
7530
  },
7488
7531
  {
7489
- id: "repeated-typed-sections",
7490
- title: "Do not restate typed parameters and returns",
7532
+ id: "restated-parameter",
7533
+ title: "Do not expand a typed parameter's name",
7491
7534
  outcome: "match",
7492
- files: [{ path: "src/client.ts", source: "/** @param id external identifier\n * @returns the value\n */\nexport function fetchValue(id: string): number { return 1; }" }],
7535
+ files: [{ path: "src/client.ts", source: "/** @param userId the user identifier */\nexport function fetchValue(userId: string): number { return 1; }" }],
7493
7536
  focusPath: "src/client.ts",
7494
7537
  expectedCount: 1,
7495
7538
  public: true
@@ -15031,7 +15074,7 @@ var rules = {
15031
15074
  };
15032
15075
  var meta = {
15033
15076
  name: "@sarj/eslint-plugin",
15034
- version: "15.6.3"
15077
+ version: "15.6.4"
15035
15078
  };
15036
15079
  var applicationOnlyRules = [
15037
15080
  "no-restricted-library-load",
package/dist/index.d.cts CHANGED
@@ -418,7 +418,7 @@ type FlatPreset = {
418
418
  declare const plugin: {
419
419
  readonly meta: {
420
420
  readonly name: "@sarj/eslint-plugin";
421
- readonly version: "15.6.3";
421
+ readonly version: "15.6.4";
422
422
  };
423
423
  readonly rules: {
424
424
  readonly "duplicate-test-body": DocumentedRule<readonly [], "duplicateTestBody">;
package/dist/index.d.ts CHANGED
@@ -418,7 +418,7 @@ type FlatPreset = {
418
418
  declare const plugin: {
419
419
  readonly meta: {
420
420
  readonly name: "@sarj/eslint-plugin";
421
- readonly version: "15.6.3";
421
+ readonly version: "15.6.4";
422
422
  };
423
423
  readonly rules: {
424
424
  readonly "duplicate-test-body": DocumentedRule<readonly [], "duplicateTestBody">;
package/dist/index.js CHANGED
@@ -1011,20 +1011,20 @@ var noCommentCruftDocumentation = {
1011
1011
  ],
1012
1012
  examples: [
1013
1013
  {
1014
- id: "rationale-comment",
1015
- title: "A comment explains why retry is required",
1014
+ id: "owned-context",
1015
+ title: "A reference records why the counter changes",
1016
1016
  outcome: "no-match",
1017
- files: [{ path: "src/retry.ts", source: "// retry because the upstream API is flaky\nconst x = retry();" }],
1018
- focusPath: "src/retry.ts",
1017
+ files: [{ path: "src/counter.ts", source: "// increment the counter for PLT-812\ncounter += 1;" }],
1018
+ focusPath: "src/counter.ts",
1019
1019
  expectedCount: 0,
1020
1020
  public: true
1021
1021
  },
1022
1022
  {
1023
- id: "region-banner",
1024
- title: "A region comment decorates a code boundary",
1023
+ id: "redundant-narration",
1024
+ title: "A comment repeats the statement below",
1025
1025
  outcome: "match",
1026
- files: [{ path: "src/helpers.ts", source: "const x = 1;\n// region helpers\nconst y = 2;" }],
1027
- focusPath: "src/helpers.ts",
1026
+ files: [{ path: "src/counter.ts", source: "// increment the counter\ncounter += 1;" }],
1027
+ focusPath: "src/counter.ts",
1028
1028
  expectedCount: 1,
1029
1029
  public: true
1030
1030
  }
@@ -4163,8 +4163,51 @@ var noLongCommentDocumentation = {
4163
4163
  category: "maintainability",
4164
4164
  limitations: ["Only JSDoc blocks are inspected; structured API docs, tests, scripts, generated files, and versioned dependencies are excluded."],
4165
4165
  examples: [
4166
- { id: "local-fact", title: "Keep a concise local fact", outcome: "no-match", files: [{ path: "src/cache.ts", source: "// The cache is process local.\nconst cache = new Map();" }], focusPath: "src/cache.ts", expectedCount: 0, public: true },
4167
- { id: "prose-wall", title: "Avoid an unstructured prose wall", outcome: "match", files: [{ path: "src/chart.ts", source: "/** One. Two. Three. Four. Five. Six. Seven. Eight. */\nconst chart = createChart();" }], focusPath: "src/chart.ts", expectedCount: 1, public: true }
4166
+ {
4167
+ id: "structured-jsdoc",
4168
+ title: "Paragraphs separate a component's durable constraints",
4169
+ outcome: "no-match",
4170
+ files: [{
4171
+ path: "src/composer.ts",
4172
+ source: [
4173
+ "/**",
4174
+ " * Shared composer.",
4175
+ " *",
4176
+ " * It serves the room. It serves task comments. It stays visually calm. It accepts attachments.",
4177
+ " *",
4178
+ " * The `tone` prop supplies task styling. The `leadingTools` prop supplies controls.",
4179
+ " * The parent owns uploads. The component owns focus.",
4180
+ " */",
4181
+ "",
4182
+ "export const Composer = forwardRef(function Composer() { return null; });"
4183
+ ].join("\n")
4184
+ }],
4185
+ focusPath: "src/composer.ts",
4186
+ expectedCount: 0,
4187
+ public: true
4188
+ },
4189
+ {
4190
+ id: "prose-wall",
4191
+ title: "One paragraph narrates a chart's design history",
4192
+ outcome: "match",
4193
+ files: [{
4194
+ path: "src/chart.ts",
4195
+ source: `/**
4196
+ * The ports chart shows arrivals and departures across the network.
4197
+ * It was originally a line chart, but the lines crossed too often.
4198
+ * Bars make adjacent ports easier to compare at a glance.
4199
+ * The axis starts at zero so visual differences stay proportional.
4200
+ * A single series uses the site navy for brand consistency.
4201
+ * Empty ports use a neutral ink so missing traffic remains visible.
4202
+ * Tooltip values repeat the units shown on the vertical axis.
4203
+ * The chart intentionally keeps labels horizontal on wide screens.
4204
+ */
4205
+ export function PortBars() { return null; }`
4206
+ }],
4207
+ focusPath: "src/chart.ts",
4208
+ expectedCount: 1,
4209
+ public: true
4210
+ }
4168
4211
  ]
4169
4212
  };
4170
4213
  var EXCESSIVE_SENTENCE_COUNT = 8;
@@ -7448,10 +7491,10 @@ var noTypedDocSectionsDocumentation = {
7448
7491
  public: true
7449
7492
  },
7450
7493
  {
7451
- id: "repeated-typed-sections",
7452
- title: "Do not restate typed parameters and returns",
7494
+ id: "restated-parameter",
7495
+ title: "Do not expand a typed parameter's name",
7453
7496
  outcome: "match",
7454
- files: [{ path: "src/client.ts", source: "/** @param id external identifier\n * @returns the value\n */\nexport function fetchValue(id: string): number { return 1; }" }],
7497
+ files: [{ path: "src/client.ts", source: "/** @param userId the user identifier */\nexport function fetchValue(userId: string): number { return 1; }" }],
7455
7498
  focusPath: "src/client.ts",
7456
7499
  expectedCount: 1,
7457
7500
  public: true
@@ -15012,7 +15055,7 @@ var rules = {
15012
15055
  };
15013
15056
  var meta = {
15014
15057
  name: "@sarj/eslint-plugin",
15015
- version: "15.6.3"
15058
+ version: "15.6.4"
15016
15059
  };
15017
15060
  var applicationOnlyRules = [
15018
15061
  "no-restricted-library-load",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sarj/eslint-plugin",
3
- "version": "15.6.3",
3
+ "version": "15.6.4",
4
4
  "packageManager": "npm@11.19.0",
5
5
  "description": "Custom ESLint rules for hypermodern TypeScript / React / Next.js projects",
6
6
  "type": "module",