slopless 0.2.3 → 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 +103 -130
- package/dist/cli.js +72 -14
- package/dist/cli.js.map +1 -1
- package/package.json +4 -2
- package/slopless.textlintrc.json +5 -0
package/README.md
CHANGED
|
@@ -1,190 +1,163 @@
|
|
|
1
1
|
# slopless
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Slopless is a deterministic Markdown checker for AI and human slop in writing.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
npm install -D slopless
|
|
7
|
-
```
|
|
5
|
+
It reports patterns that make prose padded, vague, generic, formulaic, or mechanically careless. It does not call an LLM. Output is always textlint JSON.
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
## Install
|
|
10
8
|
|
|
11
9
|
```bash
|
|
12
|
-
|
|
10
|
+
npm install -D slopless
|
|
13
11
|
```
|
|
14
12
|
|
|
15
|
-
Run
|
|
13
|
+
## Run
|
|
16
14
|
|
|
17
15
|
```bash
|
|
18
16
|
npx slopless "docs/**/*.md"
|
|
17
|
+
npx slopless draft.md > slopless.json
|
|
18
|
+
cat draft.md | npx slopless --stdin --stdin-filename draft.md
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
npx slopless "docs/**/*.md" > slopless.json
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Npm Script
|
|
28
|
-
|
|
29
|
-
Add this to `package.json`:
|
|
21
|
+
Add an npm script:
|
|
30
22
|
|
|
31
23
|
```json
|
|
32
24
|
{
|
|
33
25
|
"scripts": {
|
|
34
|
-
"lint:prose": "slopless"
|
|
26
|
+
"lint:prose": "slopless \"docs/**/*.md\""
|
|
35
27
|
}
|
|
36
28
|
}
|
|
37
29
|
```
|
|
38
30
|
|
|
39
|
-
Run:
|
|
40
|
-
|
|
41
31
|
```bash
|
|
42
32
|
npm run lint:prose
|
|
43
33
|
```
|
|
44
34
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
Slopless is a deterministic prose checker for Markdown.
|
|
48
|
-
|
|
49
|
-
It reports concrete writing patterns that often make generated or careless prose feel padded, vague, generic, or formulaic.
|
|
50
|
-
|
|
51
|
-
It is built for local scripts, CI checks, review pipelines, and tools that need structured prose findings without calling an LLM.
|
|
35
|
+
Slopless requires a file path, glob, or stdin input. A bare `npx slopless` exits with code `2`.
|
|
52
36
|
|
|
53
|
-
##
|
|
37
|
+
## Behavior
|
|
54
38
|
|
|
55
|
-
Slopless does not rewrite text.
|
|
56
|
-
|
|
57
|
-
Slopless does not check facts.
|
|
58
|
-
|
|
59
|
-
Slopless does not judge taste.
|
|
60
|
-
|
|
61
|
-
Slopless does not replace editing.
|
|
62
|
-
|
|
63
|
-
It reports rule findings. A person or another tool decides what to do with them.
|
|
64
|
-
|
|
65
|
-
## Defaults
|
|
66
|
-
|
|
67
|
-
- Checks `**/*.md` when no path is passed.
|
|
68
|
-
- Emits JSON only.
|
|
69
39
|
- Requires Node.js 20 or newer.
|
|
70
40
|
- Requires no `.textlintrc.json`.
|
|
71
41
|
- Requires no separate `textlint` install.
|
|
42
|
+
- Supports inline `textlint-disable` comments for rule ignores.
|
|
43
|
+
- Emits textlint JSON only.
|
|
44
|
+
- Rejects `--format` and `-f`.
|
|
45
|
+
- Exits `0` for no findings, `1` for prose findings, and `2` for command failure.
|
|
72
46
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
- `0`: no findings
|
|
76
|
-
- `1`: prose findings were reported
|
|
77
|
-
- `2`: command failure before linting
|
|
78
|
-
|
|
79
|
-
## Output
|
|
80
|
-
|
|
81
|
-
Output is always textlint JSON.
|
|
82
|
-
|
|
83
|
-
Each result contains the checked file path and its messages. Each message includes the rule ID, line, column, message text, and range data when textlint can provide it.
|
|
84
|
-
|
|
85
|
-
Rule IDs use this shape:
|
|
86
|
-
|
|
87
|
-
```text
|
|
88
|
-
slopless/<rule-name>
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Example:
|
|
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`.
|
|
92
48
|
|
|
93
|
-
|
|
94
|
-
slopless/semantic-thinness
|
|
95
|
-
slopless/llm-openers
|
|
96
|
-
slopless/hedge-stacking
|
|
97
|
-
```
|
|
49
|
+
## Ignore Rules
|
|
98
50
|
|
|
99
|
-
|
|
51
|
+
Ignore one rule for a block:
|
|
100
52
|
|
|
101
|
-
|
|
53
|
+
```markdown
|
|
54
|
+
<!-- textlint-disable slopless/semantic-thinness -->
|
|
102
55
|
|
|
103
|
-
|
|
104
|
-
npm ci
|
|
105
|
-
npm run lint:prose
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
Save findings as an artifact:
|
|
56
|
+
Something shifted in the room.
|
|
109
57
|
|
|
110
|
-
|
|
111
|
-
npx slopless "docs/**/*.md" > slopless.json
|
|
58
|
+
<!-- textlint-enable slopless/semantic-thinness -->
|
|
112
59
|
```
|
|
113
60
|
|
|
114
|
-
|
|
61
|
+
Ignore several rules:
|
|
115
62
|
|
|
116
|
-
|
|
63
|
+
```markdown
|
|
64
|
+
<!-- textlint-disable slopless/semantic-thinness, slopless/llm-openers -->
|
|
117
65
|
|
|
118
|
-
|
|
66
|
+
The important thing is that something shifted in the room.
|
|
119
67
|
|
|
120
|
-
|
|
121
|
-
cat draft.md | npx slopless --stdin --stdin-filename draft.md
|
|
68
|
+
<!-- textlint-enable slopless/semantic-thinness, slopless/llm-openers -->
|
|
122
69
|
```
|
|
123
70
|
|
|
124
|
-
|
|
71
|
+
Ignore all Slopless findings in a block:
|
|
125
72
|
|
|
126
|
-
|
|
73
|
+
```markdown
|
|
74
|
+
<!-- textlint-disable -->
|
|
127
75
|
|
|
128
|
-
|
|
76
|
+
Something shifted in the room.
|
|
129
77
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
npx slopless "docs/**/*.md" --quiet
|
|
134
|
-
npx slopless --stdin --stdin-filename draft.md
|
|
135
|
-
npx slopless --no-color
|
|
78
|
+
<!-- textlint-enable -->
|
|
136
79
|
```
|
|
137
80
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
-
|
|
153
|
-
-
|
|
154
|
-
-
|
|
155
|
-
-
|
|
156
|
-
-
|
|
157
|
-
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
81
|
+
Markdown comments must sit on their own lines, with blank lines around the ignored text.
|
|
82
|
+
|
|
83
|
+
## Rules
|
|
84
|
+
|
|
85
|
+
Metrics:
|
|
86
|
+
|
|
87
|
+
- `avg-sentence-length`: average sentence length above 24 words.
|
|
88
|
+
- `paragraph-length`: paragraphs over 6 sentences.
|
|
89
|
+
- `word-repetition`: one non-trivial word repeated over 5 times.
|
|
90
|
+
- `flesch-kincaid`: Flesch Reading Ease below 61.
|
|
91
|
+
- `gunning-fog` and `coleman-liau`: grade scores above 12.
|
|
92
|
+
|
|
93
|
+
Orthography:
|
|
94
|
+
|
|
95
|
+
- `colon-dramatic`: short reveals after a colon, such as `And then: everything changed.`
|
|
96
|
+
- `em-dashes`: closed em dashes.
|
|
97
|
+
- `exclamation-density`: more than 1 exclamation mark per paragraph.
|
|
98
|
+
- `fake-timestamps`: clock specificity, such as `5:47 PM`.
|
|
99
|
+
- `sentence-case`: title-case headings.
|
|
100
|
+
- `smart-quotes`: curly quotes.
|
|
101
|
+
|
|
102
|
+
Phrases and words:
|
|
103
|
+
|
|
104
|
+
- `cliches`: stock phrases, such as `at the end of the day`.
|
|
105
|
+
- `corporate-speak`: business filler, such as `move the needle`.
|
|
106
|
+
- `hedge-stacking`: stacked hedges, such as `might perhaps`.
|
|
107
|
+
- `humble-bragger`: credential lead-ins, such as `in my experience`.
|
|
108
|
+
- `jargon-faker`: borrowed tech metaphors, such as `debug your morning`.
|
|
109
|
+
- `llm-disclaimer`: assistant disclaimers, such as `as an AI language model`.
|
|
110
|
+
- `llm-vocabulary`: common AI diction, such as `delve`.
|
|
111
|
+
- `prohibited-phrases` and `prohibited-words`: package-owned banned lists.
|
|
112
|
+
- `recommended-terms` and `required-terms`: configured missing terms.
|
|
113
|
+
- `simplicity`: complex words with simple replacements, such as `utilize`.
|
|
114
|
+
- `skunked-terms`: contested broad-use terms.
|
|
115
|
+
- `uncomparables`: impossible modifiers, such as `very unique`.
|
|
116
|
+
|
|
117
|
+
Semantic thinness:
|
|
118
|
+
|
|
119
|
+
- `semantic-thinness`: low-information templates, such as `Something shifted in the room.`
|
|
120
|
+
|
|
121
|
+
Syntactic patterns:
|
|
122
|
+
|
|
123
|
+
- `affirmation-closers`: empty certainty endings, such as `and that is the key`.
|
|
124
|
+
- `authority-padding`: soft authority padding, such as `research shows`.
|
|
125
|
+
- `blame-reframe`: blame-to-insight reframes, such as `the problem is not X, it is Y`.
|
|
126
|
+
- `boilerplate-conclusion`: generic endings, such as `in conclusion`.
|
|
127
|
+
- `boilerplate-framing`: generic setup, such as `when it comes to`.
|
|
128
|
+
- `contrastive-aphorism`: slogan contrasts, such as `not faster, but smarter`.
|
|
129
|
+
- `demonstrative-emphasis`: vague `this is what` emphasis.
|
|
130
|
+
- `empty-emphasis`: unsupported importance claims, such as `this matters`.
|
|
131
|
+
- `false-question`: rhetorical questions, such as `isn't that what we all want?`
|
|
132
|
+
- `fragment-stacking`: clipped cadence, such as `Too broad. Too vague. Too late.`
|
|
133
|
+
- `generic-signposting`: generic transitions, such as `it is important to note`.
|
|
134
|
+
- `lesson-framing`: lesson extraction, such as `the lesson is`.
|
|
135
|
+
- `llm-openers`: generic openers, such as `the important thing is`.
|
|
136
|
+
- `negation-reframe`: `not X. It is Y.` constructions.
|
|
137
|
+
- `observer-guidance`: reader-instruction frames, such as `notice how`.
|
|
138
|
+
- `response-wrapper`: chat wrappers, such as `here is a revised version`.
|
|
139
|
+
- `softening-language`: vague softeners, such as `in many ways`.
|
|
140
|
+
- `summative-closer`: summary payoff lines, such as `that is what makes it work`.
|
|
141
|
+
- `triple-repeat`: repeated sentence openers, such as `It is X. It is Y. It is Z.`
|
|
142
|
+
- `universalizing-claims`: broad claims, such as `everyone knows`.
|
|
143
|
+
|
|
144
|
+
## Direct Textlint Use
|
|
145
|
+
|
|
146
|
+
Most users should run `npx slopless "docs/**/*.md"`.
|
|
147
|
+
|
|
148
|
+
The package also exports a textlint preset:
|
|
175
149
|
|
|
176
150
|
```json
|
|
177
151
|
{
|
|
152
|
+
"filters": {
|
|
153
|
+
"comments": true
|
|
154
|
+
},
|
|
178
155
|
"rules": {
|
|
179
156
|
"preset-slopless": true
|
|
180
157
|
}
|
|
181
158
|
}
|
|
182
159
|
```
|
|
183
160
|
|
|
184
|
-
Direct textlint use:
|
|
185
|
-
|
|
186
161
|
```bash
|
|
187
162
|
npx textlint "docs/**/*.md"
|
|
188
163
|
```
|
|
189
|
-
|
|
190
|
-
Most users should use `npx slopless` instead.
|
package/dist/cli.js
CHANGED
|
@@ -2,30 +2,47 @@
|
|
|
2
2
|
import { dirname, resolve } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { cli } from "textlint/lib/src/cli.js";
|
|
5
|
-
const DEFAULT_TARGET = "**/*.md";
|
|
6
5
|
const FORMAT_FLAGS = new Set(["--format", "-f"]);
|
|
7
6
|
const HELP_FLAGS = new Set(["--help", "-h"]);
|
|
7
|
+
const STDIN_FLAGS = new Set(["--stdin"]);
|
|
8
8
|
const VERSION_FLAGS = new Set(["--version", "-v"]);
|
|
9
|
-
const
|
|
10
|
-
const
|
|
9
|
+
const CONFIG_FLAGS = new Set(["--config", "-c"]);
|
|
10
|
+
const VALUE_OPTIONS = new Set([
|
|
11
|
+
"--cache-location",
|
|
12
|
+
"--config",
|
|
13
|
+
"--ignore-path",
|
|
14
|
+
"--output-file",
|
|
15
|
+
"--plugin",
|
|
16
|
+
"--preset",
|
|
17
|
+
"--rule",
|
|
18
|
+
"--rules-base-directory",
|
|
19
|
+
"--rulesdir",
|
|
20
|
+
"--stdin-filename",
|
|
21
|
+
"-c",
|
|
22
|
+
"-o"
|
|
23
|
+
]);
|
|
24
|
+
const VERSION = "0.2.5";
|
|
25
|
+
const HELP_TEXT = `Slopless checks Markdown prose for deterministic AI and human slop signals.
|
|
26
|
+
|
|
27
|
+
It reports concrete patterns that make writing padded, vague, generic,
|
|
28
|
+
formulaic, or mechanically careless. Output is always textlint JSON.
|
|
11
29
|
|
|
12
30
|
Install:
|
|
13
31
|
npm install -D slopless
|
|
14
32
|
|
|
15
33
|
Run:
|
|
16
|
-
npx slopless
|
|
17
34
|
npx slopless "docs/**/*.md"
|
|
18
35
|
npx slopless draft.md > slopless.json
|
|
19
36
|
|
|
20
37
|
Package script:
|
|
21
38
|
{
|
|
22
39
|
"scripts": {
|
|
23
|
-
"lint:prose": "slopless"
|
|
40
|
+
"lint:prose": "slopless \\"docs/**/*.md\\""
|
|
24
41
|
}
|
|
25
42
|
}
|
|
26
43
|
|
|
27
44
|
Default behavior:
|
|
28
|
-
-
|
|
45
|
+
- A file path, glob, or stdin input is required.
|
|
29
46
|
- Output is always JSON.
|
|
30
47
|
- Exit 0 means no findings.
|
|
31
48
|
- Exit 1 means Slopless found prose issues.
|
|
@@ -35,9 +52,9 @@ Default behavior:
|
|
|
35
52
|
|
|
36
53
|
What it is for:
|
|
37
54
|
Slopless is for deterministic prose checks in CI, local scripts, and review
|
|
38
|
-
pipelines. It catches
|
|
39
|
-
|
|
40
|
-
|
|
55
|
+
pipelines. It catches AI-style phrasing, empty claims, rhetorical filler,
|
|
56
|
+
weak lead-ins and closers, hedge stacking, readability problems, and Markdown
|
|
57
|
+
style signals.
|
|
41
58
|
|
|
42
59
|
What it is not for:
|
|
43
60
|
Slopless does not rewrite text, check facts, judge taste, or replace human
|
|
@@ -49,6 +66,13 @@ Useful forms:
|
|
|
49
66
|
npx slopless "docs/**/*.md" > slopless.json
|
|
50
67
|
npx slopless "docs/**/*.md" --quiet
|
|
51
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
|
+
|
|
52
76
|
Unsupported:
|
|
53
77
|
--format and -f are rejected. JSON is the only output format.
|
|
54
78
|
`;
|
|
@@ -61,11 +85,38 @@ function hasFlag(args, flags) {
|
|
|
61
85
|
return args.some((arg) => flags.has(arg));
|
|
62
86
|
}
|
|
63
87
|
function hasFileTarget(args) {
|
|
64
|
-
|
|
88
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
89
|
+
const arg = args[index];
|
|
90
|
+
if (arg === undefined) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (VALUE_OPTIONS.has(arg)) {
|
|
94
|
+
index += 1;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (arg.startsWith("--") && arg.includes("=")) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (arg.startsWith("-")) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
function packageRoot() {
|
|
108
|
+
return dirname(dirname(fileURLToPath(import.meta.url)));
|
|
65
109
|
}
|
|
66
110
|
function packageNodeModules() {
|
|
67
|
-
|
|
68
|
-
|
|
111
|
+
return resolve(packageRoot(), "..");
|
|
112
|
+
}
|
|
113
|
+
async function readStdin() {
|
|
114
|
+
let text = "";
|
|
115
|
+
const stream = process.stdin.setEncoding("utf8");
|
|
116
|
+
for await (const chunk of stream) {
|
|
117
|
+
text += chunk;
|
|
118
|
+
}
|
|
119
|
+
return text;
|
|
69
120
|
}
|
|
70
121
|
async function main() {
|
|
71
122
|
const userArgs = process.argv.slice(2);
|
|
@@ -81,9 +132,16 @@ async function main() {
|
|
|
81
132
|
process.stderr.write("slopless always writes JSON output. Remove --format / -f.\n");
|
|
82
133
|
return 2;
|
|
83
134
|
}
|
|
135
|
+
if (!hasFileTarget(userArgs) && !hasFlag(userArgs, STDIN_FLAGS)) {
|
|
136
|
+
process.stderr.write("slopless requires a file path, glob, or --stdin input. Run slopless --help.\n");
|
|
137
|
+
return 2;
|
|
138
|
+
}
|
|
84
139
|
const args = [
|
|
85
140
|
"node",
|
|
86
141
|
"slopless",
|
|
142
|
+
...(hasFlag(userArgs, CONFIG_FLAGS)
|
|
143
|
+
? []
|
|
144
|
+
: ["--config", resolve(packageRoot(), "slopless.textlintrc.json")]),
|
|
87
145
|
"--preset",
|
|
88
146
|
"slopless",
|
|
89
147
|
"--rules-base-directory",
|
|
@@ -92,8 +150,8 @@ async function main() {
|
|
|
92
150
|
"json",
|
|
93
151
|
...userArgs
|
|
94
152
|
];
|
|
95
|
-
if (
|
|
96
|
-
|
|
153
|
+
if (hasFlag(userArgs, STDIN_FLAGS)) {
|
|
154
|
+
return cli.execute(args, await readStdin());
|
|
97
155
|
}
|
|
98
156
|
return cli.execute(args);
|
|
99
157
|
}
|
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,
|
|
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
|
},
|