slopless 0.2.4 → 0.2.5
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/README.md +38 -0
- package/dist/cli.js +16 -3
- package/dist/cli.js.map +1 -1
- package/package.json +4 -2
- package/slopless.textlintrc.json +5 -0
package/README.md
CHANGED
|
@@ -39,12 +39,47 @@ Slopless requires a file path, glob, or stdin input. A bare `npx slopless` exits
|
|
|
39
39
|
- Requires Node.js 20 or newer.
|
|
40
40
|
- Requires no `.textlintrc.json`.
|
|
41
41
|
- Requires no separate `textlint` install.
|
|
42
|
+
- Supports inline `textlint-disable` comments for rule ignores.
|
|
42
43
|
- Emits textlint JSON only.
|
|
43
44
|
- Rejects `--format` and `-f`.
|
|
44
45
|
- Exits `0` for no findings, `1` for prose findings, and `2` for command failure.
|
|
45
46
|
|
|
46
47
|
Each JSON message includes the rule ID, line, column, message, and range data when textlint provides it. Rule IDs use `slopless/<rule-name>` in wrapped textlint output, such as `slopless/semantic-thinness`.
|
|
47
48
|
|
|
49
|
+
## Ignore Rules
|
|
50
|
+
|
|
51
|
+
Ignore one rule for a block:
|
|
52
|
+
|
|
53
|
+
```markdown
|
|
54
|
+
<!-- textlint-disable slopless/semantic-thinness -->
|
|
55
|
+
|
|
56
|
+
Something shifted in the room.
|
|
57
|
+
|
|
58
|
+
<!-- textlint-enable slopless/semantic-thinness -->
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Ignore several rules:
|
|
62
|
+
|
|
63
|
+
```markdown
|
|
64
|
+
<!-- textlint-disable slopless/semantic-thinness, slopless/llm-openers -->
|
|
65
|
+
|
|
66
|
+
The important thing is that something shifted in the room.
|
|
67
|
+
|
|
68
|
+
<!-- textlint-enable slopless/semantic-thinness, slopless/llm-openers -->
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Ignore all Slopless findings in a block:
|
|
72
|
+
|
|
73
|
+
```markdown
|
|
74
|
+
<!-- textlint-disable -->
|
|
75
|
+
|
|
76
|
+
Something shifted in the room.
|
|
77
|
+
|
|
78
|
+
<!-- textlint-enable -->
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Markdown comments must sit on their own lines, with blank lines around the ignored text.
|
|
82
|
+
|
|
48
83
|
## Rules
|
|
49
84
|
|
|
50
85
|
Metrics:
|
|
@@ -114,6 +149,9 @@ The package also exports a textlint preset:
|
|
|
114
149
|
|
|
115
150
|
```json
|
|
116
151
|
{
|
|
152
|
+
"filters": {
|
|
153
|
+
"comments": true
|
|
154
|
+
},
|
|
117
155
|
"rules": {
|
|
118
156
|
"preset-slopless": true
|
|
119
157
|
}
|
package/dist/cli.js
CHANGED
|
@@ -6,6 +6,7 @@ const FORMAT_FLAGS = new Set(["--format", "-f"]);
|
|
|
6
6
|
const HELP_FLAGS = new Set(["--help", "-h"]);
|
|
7
7
|
const STDIN_FLAGS = new Set(["--stdin"]);
|
|
8
8
|
const VERSION_FLAGS = new Set(["--version", "-v"]);
|
|
9
|
+
const CONFIG_FLAGS = new Set(["--config", "-c"]);
|
|
9
10
|
const VALUE_OPTIONS = new Set([
|
|
10
11
|
"--cache-location",
|
|
11
12
|
"--config",
|
|
@@ -20,7 +21,7 @@ const VALUE_OPTIONS = new Set([
|
|
|
20
21
|
"-c",
|
|
21
22
|
"-o"
|
|
22
23
|
]);
|
|
23
|
-
const VERSION = "0.2.
|
|
24
|
+
const VERSION = "0.2.5";
|
|
24
25
|
const HELP_TEXT = `Slopless checks Markdown prose for deterministic AI and human slop signals.
|
|
25
26
|
|
|
26
27
|
It reports concrete patterns that make writing padded, vague, generic,
|
|
@@ -65,6 +66,13 @@ Useful forms:
|
|
|
65
66
|
npx slopless "docs/**/*.md" > slopless.json
|
|
66
67
|
npx slopless "docs/**/*.md" --quiet
|
|
67
68
|
|
|
69
|
+
Ignore one rule:
|
|
70
|
+
<!-- textlint-disable slopless/semantic-thinness -->
|
|
71
|
+
|
|
72
|
+
Something shifted in the room.
|
|
73
|
+
|
|
74
|
+
<!-- textlint-enable slopless/semantic-thinness -->
|
|
75
|
+
|
|
68
76
|
Unsupported:
|
|
69
77
|
--format and -f are rejected. JSON is the only output format.
|
|
70
78
|
`;
|
|
@@ -96,9 +104,11 @@ function hasFileTarget(args) {
|
|
|
96
104
|
}
|
|
97
105
|
return false;
|
|
98
106
|
}
|
|
107
|
+
function packageRoot() {
|
|
108
|
+
return dirname(dirname(fileURLToPath(import.meta.url)));
|
|
109
|
+
}
|
|
99
110
|
function packageNodeModules() {
|
|
100
|
-
|
|
101
|
-
return resolve(packageRoot, "..");
|
|
111
|
+
return resolve(packageRoot(), "..");
|
|
102
112
|
}
|
|
103
113
|
async function readStdin() {
|
|
104
114
|
let text = "";
|
|
@@ -129,6 +139,9 @@ async function main() {
|
|
|
129
139
|
const args = [
|
|
130
140
|
"node",
|
|
131
141
|
"slopless",
|
|
142
|
+
...(hasFlag(userArgs, CONFIG_FLAGS)
|
|
143
|
+
? []
|
|
144
|
+
: ["--config", resolve(packageRoot(), "slopless.textlintrc.json")]),
|
|
132
145
|
"--preset",
|
|
133
146
|
"slopless",
|
|
134
147
|
"--rules-base-directory",
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAE9C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;AACjD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACzC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;AACnD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,kBAAkB;IAClB,UAAU;IACV,eAAe;IACf,eAAe;IACf,UAAU;IACV,UAAU;IACV,QAAQ;IACR,wBAAwB;IACxB,YAAY;IACZ,kBAAkB;IAClB,IAAI;IACJ,IAAI;CACL,CAAC,CAAC;AACH,MAAM,OAAO,GAAG,OAAO,CAAC;AACxB,MAAM,SAAS,GAAG
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "slopless",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "Deterministic textlint rules for detecting slop in prose.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
},
|
|
29
29
|
"files": [
|
|
30
30
|
"dist",
|
|
31
|
-
"README.md"
|
|
31
|
+
"README.md",
|
|
32
|
+
"slopless.textlintrc.json"
|
|
32
33
|
],
|
|
33
34
|
"bin": {
|
|
34
35
|
"slopless": "dist/cli.js"
|
|
@@ -89,6 +90,7 @@
|
|
|
89
90
|
"@textlint/types": "15.6.1",
|
|
90
91
|
"sentence-splitter": "5.0.1",
|
|
91
92
|
"textlint": "15.6.1",
|
|
93
|
+
"textlint-filter-rule-comments": "^1.3.0",
|
|
92
94
|
"textlint-rule-helper": "2.5.0",
|
|
93
95
|
"textlint-util-to-string": "3.3.4"
|
|
94
96
|
},
|