simple_english 0.1.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.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +193 -0
- data/bin/se +6 -0
- data/docs/RULES.md +496 -0
- data/lib/simple_english/annotated_text.rb +117 -0
- data/lib/simple_english/cli.rb +152 -0
- data/lib/simple_english/client.rb +133 -0
- data/lib/simple_english/config.rb +51 -0
- data/lib/simple_english/counts.rb +40 -0
- data/lib/simple_english/engine.rb +31 -0
- data/lib/simple_english/extractor.rb +55 -0
- data/lib/simple_english/finding.rb +8 -0
- data/lib/simple_english/http.rb +76 -0
- data/lib/simple_english/install.rb +75 -0
- data/lib/simple_english/languagetool.rb +143 -0
- data/lib/simple_english/markdown.rb +97 -0
- data/lib/simple_english/paragraph.rb +10 -0
- data/lib/simple_english/plain_text.rb +17 -0
- data/lib/simple_english/result.rb +18 -0
- data/lib/simple_english/segment.rb +11 -0
- data/lib/simple_english/server.rb +196 -0
- data/lib/simple_english/span.rb +8 -0
- data/lib/simple_english/suppressions.rb +37 -0
- data/lib/simple_english.rb +78 -0
- data/rules/simple-english.xml +617 -0
- metadata +168 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 7c05cc78b762e2b44f4c841ef5a78537e91d9bcd408ed8739fcc00f3538f14eb
|
|
4
|
+
data.tar.gz: 9abac46821a9260b3ec7312a1c258464e08a943262eaccab893383104479dcee
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 6c4ac5c79f9a62c848ae37977dfb48ec2b815b27e5a38af7ab448a489206b14b8b26dec4f560b5115dd5be3c3688bfed254ebecbfd5e57c83c84d4a545367780
|
|
7
|
+
data.tar.gz: 699067a5a056a54186fe40d62ee17dd358492409dd86a76fc17cd2e1be8d110ee1147daa3ecb5f4d8b995cfd98f4108e96adbf6ed96603a43566ee820fd48729
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 tony.hsu
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# simple_english
|
|
2
|
+
|
|
3
|
+
> Write for human readers, not for reviewers or another AI.
|
|
4
|
+
|
|
5
|
+
AI writes your docs and code comments in seconds. This linter cuts
|
|
6
|
+
the slop it leaves behind. Every finding says what to write
|
|
7
|
+
instead.
|
|
8
|
+
|
|
9
|
+
```console
|
|
10
|
+
$ printf 'You should leverage this tool in order to make sure that your docs are readable.' > note.md
|
|
11
|
+
$ se note.md
|
|
12
|
+
note.md:1: [SE_MODAL_RESTRICTED] Use can, will, or must. State the requirement exactly.
|
|
13
|
+
note.md:1: [SE_SLOP_IN_ORDER_TO] Write "to".
|
|
14
|
+
note.md:1: [SE_SLOP_LEVERAGE] Write "use".
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Markdown prose plus code comments in Python, Ruby, JavaScript,
|
|
18
|
+
TypeScript, Go, Rust, Java, C#, Kotlin, bash, and YAML. Output as plain
|
|
19
|
+
text, JSON, or SARIF.
|
|
20
|
+
|
|
21
|
+
## The rules
|
|
22
|
+
|
|
23
|
+
- **Voice:** say who does the action.
|
|
24
|
+
- **Tense:** simple tenses only, no present perfect.
|
|
25
|
+
- **Modals:** `can`, `will`, `must` only.
|
|
26
|
+
- **Punctuation:** no em-dashes, no semicolons.
|
|
27
|
+
- **Contractions:** write every word in full.
|
|
28
|
+
- **Sentence shape:** condition before command, no `-ing` phrase after a comma.
|
|
29
|
+
- **Word choice:** about 50 substitution rules, from `leverage` to `in conclusion`. `make sure that` keeps its "that".
|
|
30
|
+
- **Code comments:** same pattern rules, with line and column.
|
|
31
|
+
- **Counts (Markdown only):** 20 words per sentence in list items, 25 in paragraphs, six sentences per paragraph at most.
|
|
32
|
+
|
|
33
|
+
The full list, with a wrong and a right example for each rule:
|
|
34
|
+
[docs/RULES.md](docs/RULES.md).
|
|
35
|
+
|
|
36
|
+
## Install
|
|
37
|
+
|
|
38
|
+
**Requirements:** Ruby 3.3 or newer, Java 11 or newer for
|
|
39
|
+
LanguageTool. The Docker image bundles both.
|
|
40
|
+
|
|
41
|
+
### Ruby gem
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
gem install simple_english
|
|
45
|
+
se setup # run once: downloads LanguageTool, locates Java, verifies both
|
|
46
|
+
se README.md
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`se setup` puts LanguageTool into `~/.cache/se` and touches nothing
|
|
50
|
+
in your shell profile. Pass `--dir PATH` or set `SE_CACHE_DIR` to
|
|
51
|
+
put the cache somewhere else. If `java` is not on PATH, set `SE_JAVA`
|
|
52
|
+
to your java binary.
|
|
53
|
+
|
|
54
|
+
### Container
|
|
55
|
+
|
|
56
|
+
The image holds Ruby, Java, and LanguageTool, so it needs no setup:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
docker run -v "$PWD":/work ghcr.io/tonycthsu/simple-english:latest docs/
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Or keep the daemon in a container and lint through it:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
docker run -d --name se-daemon -p 8181:8181 ghcr.io/tonycthsu/simple-english:latest serve
|
|
66
|
+
SE_SERVER_URL=http://localhost:8181 se lint docs/
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Git repository
|
|
70
|
+
|
|
71
|
+
Run `bundle install`, then use `bin/se`.
|
|
72
|
+
|
|
73
|
+
## Usage
|
|
74
|
+
|
|
75
|
+
Lint files, directories, or stdin. From a checkout, the same commands
|
|
76
|
+
run through `bin/se`:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
se README.md
|
|
80
|
+
se docs/ # every .md, .py, .rb, .yaml, .yml, ... under docs/
|
|
81
|
+
se - < notes.md # stdin (Markdown)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Lint only what changed:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
git diff --name-only --diff-filter=ACM main | xargs se
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Outputs
|
|
91
|
+
|
|
92
|
+
Findings print as `file:line: [RULE_ID] message`. Code-comment findings also carry a column in `--format json` and `--format sarif`:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
se --format json docs/
|
|
96
|
+
se --format sarif src/ > results.sarif
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Exit codes
|
|
100
|
+
|
|
101
|
+
- `0`: no findings
|
|
102
|
+
- `1`: findings
|
|
103
|
+
- `2`: setup error
|
|
104
|
+
|
|
105
|
+
### CI
|
|
106
|
+
|
|
107
|
+
Gate the docs in the pull request that changes them. The plain run
|
|
108
|
+
fails the build on findings, and the SARIF report puts them inline:
|
|
109
|
+
|
|
110
|
+
```yaml
|
|
111
|
+
name: lint-docs
|
|
112
|
+
on: [pull_request]
|
|
113
|
+
permissions:
|
|
114
|
+
security-events: write
|
|
115
|
+
jobs:
|
|
116
|
+
lint:
|
|
117
|
+
runs-on: ubuntu-latest
|
|
118
|
+
steps:
|
|
119
|
+
- uses: actions/checkout@v7
|
|
120
|
+
- uses: ruby/setup-ruby@v1
|
|
121
|
+
- run: gem install simple_english
|
|
122
|
+
- run: se setup
|
|
123
|
+
- run: se --format sarif . > lint.sarif
|
|
124
|
+
- run: se .
|
|
125
|
+
- uses: github/codeql-action/upload-sarif@v3
|
|
126
|
+
with:
|
|
127
|
+
sarif_file: lint.sarif
|
|
128
|
+
if: always()
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Config and suppressions
|
|
132
|
+
|
|
133
|
+
### Config file
|
|
134
|
+
|
|
135
|
+
`.simple-english.yml` in the working directory:
|
|
136
|
+
|
|
137
|
+
```yaml
|
|
138
|
+
ignore:
|
|
139
|
+
- vendor/**
|
|
140
|
+
disabled-rules:
|
|
141
|
+
- SE_NO_EMDASH
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
`ignore` globs: `**` crosses directories, `*` stays in one segment.
|
|
145
|
+
|
|
146
|
+
### Inline suppressions
|
|
147
|
+
|
|
148
|
+
A line containing `se: ignore` suppresses findings reported on that
|
|
149
|
+
line. Use `se: ignore=RULE1,RULE2` to scope it to rules. Pattern
|
|
150
|
+
findings cite the line of the match, so put the directive on the line the
|
|
151
|
+
finding reports.
|
|
152
|
+
|
|
153
|
+
In Markdown:
|
|
154
|
+
|
|
155
|
+
```markdown
|
|
156
|
+
The daemon keeps it's own lock. <!-- se: ignore=SE_NO_CONTRACTIONS -->
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
In a code comment:
|
|
160
|
+
|
|
161
|
+
```ruby
|
|
162
|
+
# Don't touch this constant. se: ignore=SE_NO_CONTRACTIONS
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## The daemon
|
|
166
|
+
|
|
167
|
+
The first lint starts the daemon automatically (about 15 seconds
|
|
168
|
+
once, then you need Java and one run of `se setup`). Later lints hit
|
|
169
|
+
the running daemon and take milliseconds. To start it ahead of time:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
se serve --port 8181 &
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Any tool or language can lint through its HTTP API:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
curl -d "text=Don't do this." http://localhost:8181/lint
|
|
179
|
+
# [{"line":1,"column":null,"rule":"SE_NO_CONTRACTIONS","message":"..."}]
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
The full wire format: [docs/DAEMON.md](docs/DAEMON.md).
|
|
183
|
+
|
|
184
|
+
## Scope
|
|
185
|
+
|
|
186
|
+
The rule set comes from the Plain-mode rules of the MIT-licensed
|
|
187
|
+
SimpleEnglish project. This tool does not check ASD-STE100 compliance.
|
|
188
|
+
This repo holds no ASD-STE100 text. If you need full compliance, read
|
|
189
|
+
the free standard at <https://www.asd-ste100.org/>.
|
|
190
|
+
|
|
191
|
+
## Develop
|
|
192
|
+
|
|
193
|
+
To change the linter, add rules, or run the tests, read [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md).
|
data/bin/se
ADDED
data/docs/RULES.md
ADDED
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
# Rules
|
|
2
|
+
|
|
3
|
+
Generated by `bin/render-rules`. Do not edit by hand. The source
|
|
4
|
+
of truth is `rules/simple-english.xml` and
|
|
5
|
+
`lib/simple_english/counts.rb`.
|
|
6
|
+
|
|
7
|
+
## Pattern rules
|
|
8
|
+
|
|
9
|
+
### SE_NO_CONTRACTIONS: No contractions
|
|
10
|
+
|
|
11
|
+
Write the words in full. No contractions.
|
|
12
|
+
|
|
13
|
+
- Wrong: You don't need this file.
|
|
14
|
+
- Right: You do not need this file.
|
|
15
|
+
|
|
16
|
+
### SE_NO_SEMICOLON: No semicolons
|
|
17
|
+
|
|
18
|
+
Write two sentences, or name the relation.
|
|
19
|
+
|
|
20
|
+
- Wrong: Start the tool; then read the log.
|
|
21
|
+
- Right: Start the tool. Then read the log.
|
|
22
|
+
|
|
23
|
+
### SE_NO_EMDASH: No em-dashes
|
|
24
|
+
|
|
25
|
+
Write two sentences, or use a comma.
|
|
26
|
+
|
|
27
|
+
- Wrong: The tool is fast—it also works.
|
|
28
|
+
- Right: The tool is fast. It also works.
|
|
29
|
+
|
|
30
|
+
### SE_MODAL_RESTRICTED: Only can, will, must
|
|
31
|
+
|
|
32
|
+
Use can, will, or must. State the requirement exactly.
|
|
33
|
+
|
|
34
|
+
- Wrong: You should restart the service.
|
|
35
|
+
- Right: You must restart the service.
|
|
36
|
+
|
|
37
|
+
### SE_ACTIVE_VOICE: Active voice
|
|
38
|
+
|
|
39
|
+
Use the active voice. Say who does the action.
|
|
40
|
+
|
|
41
|
+
- Wrong: The log was written by the worker.
|
|
42
|
+
- Right: The worker wrote the log.
|
|
43
|
+
|
|
44
|
+
### SE_PRESENT_PERFECT: Simple tenses only
|
|
45
|
+
|
|
46
|
+
Use the simple past. Say when it happened.
|
|
47
|
+
|
|
48
|
+
- Wrong: The job has completed.
|
|
49
|
+
- Right: The job completed.
|
|
50
|
+
|
|
51
|
+
### SE_ING_AFTER_COMMA: No -ing after a comma
|
|
52
|
+
|
|
53
|
+
Start a new sentence instead of the -ing phrase.
|
|
54
|
+
|
|
55
|
+
- Wrong: The tool runs, making it easy.
|
|
56
|
+
- Right: The tool runs. It is easy.
|
|
57
|
+
|
|
58
|
+
### SE_KEEP_THAT: make sure that
|
|
59
|
+
|
|
60
|
+
Write "make sure that".
|
|
61
|
+
|
|
62
|
+
- Wrong: Make sure the file exists.
|
|
63
|
+
- Right: Make sure that the file exists.
|
|
64
|
+
|
|
65
|
+
### SE_CONDITION_FIRST: Condition before command
|
|
66
|
+
|
|
67
|
+
Put the condition first: "If the build fails, read the log."
|
|
68
|
+
|
|
69
|
+
- Wrong: Read the log if the build fails.
|
|
70
|
+
- Right: If the build fails, read the log.
|
|
71
|
+
|
|
72
|
+
### SE_SLOP_LEVERAGE: use, not leverage
|
|
73
|
+
|
|
74
|
+
Write use.
|
|
75
|
+
|
|
76
|
+
- Wrong: Utilize the registry file.
|
|
77
|
+
- Right: Use the registry file.
|
|
78
|
+
|
|
79
|
+
### SE_SLOP_IN_ORDER_TO: to, not in order to
|
|
80
|
+
|
|
81
|
+
Write to.
|
|
82
|
+
|
|
83
|
+
- Wrong: Run the tool in order to build the file.
|
|
84
|
+
- Right: Run the tool to build the file.
|
|
85
|
+
|
|
86
|
+
### SE_SLOP_PRIOR_TO: before, not prior to
|
|
87
|
+
|
|
88
|
+
Write before.
|
|
89
|
+
|
|
90
|
+
- Wrong: Read the file prior to the upgrade.
|
|
91
|
+
- Right: Read the file before the upgrade.
|
|
92
|
+
|
|
93
|
+
### SE_SLOP_ENSURE: make sure that, not ensure
|
|
94
|
+
|
|
95
|
+
Write make sure that.
|
|
96
|
+
|
|
97
|
+
- Wrong: Ensure the file exists.
|
|
98
|
+
- Right: Make sure that the file exists.
|
|
99
|
+
|
|
100
|
+
### SE_SLOP_FUNCTIONALITY: function, not functionality
|
|
101
|
+
|
|
102
|
+
Write function or feature.
|
|
103
|
+
|
|
104
|
+
- Wrong: Add the functionality first.
|
|
105
|
+
- Right: Add the function first.
|
|
106
|
+
|
|
107
|
+
### SE_SLOP_ENABLES_YOU: you can, not enables you to
|
|
108
|
+
|
|
109
|
+
Write you can.
|
|
110
|
+
|
|
111
|
+
- Wrong: The tool enables you to build the file.
|
|
112
|
+
- Right: You can build the file with the tool.
|
|
113
|
+
|
|
114
|
+
### SE_SLOP_FACILITATE: help, not facilitate
|
|
115
|
+
|
|
116
|
+
Write help or make possible.
|
|
117
|
+
|
|
118
|
+
- Wrong: The tool facilitates the build.
|
|
119
|
+
- Right: The tool helps the build.
|
|
120
|
+
|
|
121
|
+
### SE_SLOP_DELVE: read, not delve into
|
|
122
|
+
|
|
123
|
+
Write read or examine.
|
|
124
|
+
|
|
125
|
+
- Wrong: Delve into the config file.
|
|
126
|
+
- Right: Read the config file.
|
|
127
|
+
|
|
128
|
+
### SE_SLOP_WHEN_IT_COMES: for, not when it comes to
|
|
129
|
+
|
|
130
|
+
Write for.
|
|
131
|
+
|
|
132
|
+
- Wrong: When it comes to builds, use the tool.
|
|
133
|
+
- Right: For builds, use the tool.
|
|
134
|
+
|
|
135
|
+
### SE_SLOP_IN_THE_EVENT: if, not in the event that
|
|
136
|
+
|
|
137
|
+
Write if.
|
|
138
|
+
|
|
139
|
+
- Wrong: In the event that the build fails, read the log.
|
|
140
|
+
- Right: If the build fails, read the log.
|
|
141
|
+
|
|
142
|
+
### SE_SLOP_DUE_TO_FACT: because, not due to the fact that
|
|
143
|
+
|
|
144
|
+
Write because.
|
|
145
|
+
|
|
146
|
+
- Wrong: Due to the fact that the port is closed, the tool fails.
|
|
147
|
+
- Right: Because the port is not open, the tool fails.
|
|
148
|
+
|
|
149
|
+
### SE_SLOP_AND_OR: no and/or
|
|
150
|
+
|
|
151
|
+
Pick one. Or write "X, or Y, or both".
|
|
152
|
+
|
|
153
|
+
- Wrong: Set the flag and/or the port.
|
|
154
|
+
- Right: Set the flag, or the port, or both.
|
|
155
|
+
|
|
156
|
+
### SE_SLOP_LATIN: no Latin abbreviations
|
|
157
|
+
|
|
158
|
+
#### e.g.
|
|
159
|
+
|
|
160
|
+
Write "for example", or name the items.
|
|
161
|
+
|
|
162
|
+
- Wrong: Set the flag, e.g. the port.
|
|
163
|
+
- Right: Set the flag, for example the port.
|
|
164
|
+
|
|
165
|
+
#### i.e.
|
|
166
|
+
|
|
167
|
+
Write "that is", or name the items.
|
|
168
|
+
|
|
169
|
+
- Wrong: Set the flag, i.e. the port.
|
|
170
|
+
- Right: Set the flag, that is the port.
|
|
171
|
+
|
|
172
|
+
#### etc.
|
|
173
|
+
|
|
174
|
+
Name the items.
|
|
175
|
+
|
|
176
|
+
- Wrong: Set the flag, etc.
|
|
177
|
+
- Right: Set the flag or the port.
|
|
178
|
+
|
|
179
|
+
### SE_SLOP_OUT_OF_BOX: by default, not out of the box
|
|
180
|
+
|
|
181
|
+
Write by default.
|
|
182
|
+
|
|
183
|
+
- Wrong: The tool works out of the box.
|
|
184
|
+
- Right: The tool works by default.
|
|
185
|
+
|
|
186
|
+
### SE_SLOP_UNDER_HOOD: internally, not under the hood
|
|
187
|
+
|
|
188
|
+
Write internally.
|
|
189
|
+
|
|
190
|
+
- Wrong: Under the hood, the tool builds a file.
|
|
191
|
+
- Right: Internally, the tool builds a file.
|
|
192
|
+
|
|
193
|
+
### SE_SLOP_STREAMLINE: make simpler, not streamline
|
|
194
|
+
|
|
195
|
+
Write make simpler or make faster.
|
|
196
|
+
|
|
197
|
+
- Wrong: The tool streamlines the build.
|
|
198
|
+
- Right: The tool makes the build simpler.
|
|
199
|
+
|
|
200
|
+
### SE_SLOP_PLETHORA: many, not plethora
|
|
201
|
+
|
|
202
|
+
Write many.
|
|
203
|
+
|
|
204
|
+
- Wrong: The file has a plethora of rows.
|
|
205
|
+
- Right: The file has many rows.
|
|
206
|
+
|
|
207
|
+
### SE_SLOP_ADDRESSES: corrects, not addresses the issue
|
|
208
|
+
|
|
209
|
+
Write corrects the fault or removes the error.
|
|
210
|
+
|
|
211
|
+
- Wrong: The tool addresses the issue.
|
|
212
|
+
- Right: The tool corrects the fault.
|
|
213
|
+
|
|
214
|
+
### SE_SLOP_PIVOTAL: important, not pivotal
|
|
215
|
+
|
|
216
|
+
Write important.
|
|
217
|
+
|
|
218
|
+
- Wrong: The flag is crucial.
|
|
219
|
+
- Right: The flag is important.
|
|
220
|
+
|
|
221
|
+
### SE_SLOP_TAPESTRY: no tapestry, testament, synergy
|
|
222
|
+
|
|
223
|
+
Delete it. State the fact.
|
|
224
|
+
|
|
225
|
+
- Wrong: The design is a testament to the team.
|
|
226
|
+
- Right: The design shows the work of the team.
|
|
227
|
+
|
|
228
|
+
### SE_SLOP_INTERPLAY: interaction, not interplay
|
|
229
|
+
|
|
230
|
+
Write interaction, or delete it.
|
|
231
|
+
|
|
232
|
+
- Wrong: The interplay of the two tools is complex.
|
|
233
|
+
- Right: The interaction of the two tools is complex.
|
|
234
|
+
|
|
235
|
+
### SE_SLOP_INTRICATE: complex, not intricate
|
|
236
|
+
|
|
237
|
+
Write complex.
|
|
238
|
+
|
|
239
|
+
- Wrong: The config is intricate.
|
|
240
|
+
- Right: The config is complex.
|
|
241
|
+
|
|
242
|
+
### SE_SLOP_VIBRANT: delete vibrant, nuanced, multifaceted
|
|
243
|
+
|
|
244
|
+
Delete it, or name the parts.
|
|
245
|
+
|
|
246
|
+
- Wrong: The tool is nuanced.
|
|
247
|
+
- Right: The tool reads three file types.
|
|
248
|
+
|
|
249
|
+
### SE_SLOP_REALM: area, not realm or landscape
|
|
250
|
+
|
|
251
|
+
Write area.
|
|
252
|
+
|
|
253
|
+
- Wrong: In the realm of builds, use the tool.
|
|
254
|
+
- Right: In the area of builds, use the tool.
|
|
255
|
+
|
|
256
|
+
### SE_SLOP_GROUNDBREAKING: new, not groundbreaking
|
|
257
|
+
|
|
258
|
+
Write new, or delete it.
|
|
259
|
+
|
|
260
|
+
- Wrong: The tool is groundbreaking.
|
|
261
|
+
- Right: The tool is new.
|
|
262
|
+
|
|
263
|
+
### SE_SLOP_TRANSFORMATIVE: say what changes, not transformative
|
|
264
|
+
|
|
265
|
+
Delete it. Say what changes.
|
|
266
|
+
|
|
267
|
+
- Wrong: The tool is transformative.
|
|
268
|
+
- Right: The tool cuts the build time in half.
|
|
269
|
+
|
|
270
|
+
### SE_SLOP_REVOLUTIONIZE: change, not revolutionize
|
|
271
|
+
|
|
272
|
+
Write change.
|
|
273
|
+
|
|
274
|
+
- Wrong: The tool revolutionizes the build.
|
|
275
|
+
- Right: The tool changes the build.
|
|
276
|
+
|
|
277
|
+
### SE_SLOP_SHOWCASE: show, not showcase
|
|
278
|
+
|
|
279
|
+
Write show.
|
|
280
|
+
|
|
281
|
+
- Wrong: The log showcases the error.
|
|
282
|
+
- Right: The log shows the error.
|
|
283
|
+
|
|
284
|
+
### SE_SLOP_FOSTER: help, not foster
|
|
285
|
+
|
|
286
|
+
Write help, support, or let.
|
|
287
|
+
|
|
288
|
+
- Wrong: The tool fosters growth.
|
|
289
|
+
- Right: The tool supports growth.
|
|
290
|
+
|
|
291
|
+
### SE_SLOP_HARNESS: use, not harness
|
|
292
|
+
|
|
293
|
+
Write use.
|
|
294
|
+
|
|
295
|
+
- Wrong: Harness the API.
|
|
296
|
+
- Right: Use the API.
|
|
297
|
+
|
|
298
|
+
### SE_SLOP_ENHANCE: improve, not enhance
|
|
299
|
+
|
|
300
|
+
Write improve.
|
|
301
|
+
|
|
302
|
+
- Wrong: The tool enhances the build.
|
|
303
|
+
- Right: The tool improves the build.
|
|
304
|
+
|
|
305
|
+
### SE_SLOP_ELEVATE: increase, not elevate
|
|
306
|
+
|
|
307
|
+
Write increase.
|
|
308
|
+
|
|
309
|
+
- Wrong: The tool elevates the speed.
|
|
310
|
+
- Right: The tool increases the speed.
|
|
311
|
+
|
|
312
|
+
### SE_SLOP_FURTHERMORE: also, not furthermore
|
|
313
|
+
|
|
314
|
+
Write also.
|
|
315
|
+
|
|
316
|
+
- Wrong: Furthermore, the tool reads the log.
|
|
317
|
+
- Right: The tool also reads the log.
|
|
318
|
+
|
|
319
|
+
### SE_SLOP_EMBARK: start, not embark
|
|
320
|
+
|
|
321
|
+
Write start or try.
|
|
322
|
+
|
|
323
|
+
- Wrong: Embark on the build.
|
|
324
|
+
- Right: Start the build.
|
|
325
|
+
|
|
326
|
+
### SE_SLOP_METICULOUS: careful, not meticulous
|
|
327
|
+
|
|
328
|
+
Write careful or carefully.
|
|
329
|
+
|
|
330
|
+
- Wrong: The tool checks the file meticulously.
|
|
331
|
+
- Right: The tool checks the file carefully.
|
|
332
|
+
|
|
333
|
+
### SE_SLOP_HOLISTIC: full, not holistic
|
|
334
|
+
|
|
335
|
+
Write full.
|
|
336
|
+
|
|
337
|
+
- Wrong: The tool gives a holistic view.
|
|
338
|
+
- Right: The tool gives a full view.
|
|
339
|
+
|
|
340
|
+
### SE_SLOP_PARADIGM: model, not paradigm
|
|
341
|
+
|
|
342
|
+
Write model.
|
|
343
|
+
|
|
344
|
+
- Wrong: The tool changes the paradigm.
|
|
345
|
+
- Right: The tool changes the model.
|
|
346
|
+
|
|
347
|
+
### SE_SLOP_BOASTS: has, not boasts
|
|
348
|
+
|
|
349
|
+
Write has.
|
|
350
|
+
|
|
351
|
+
- Wrong: The tool boasts a log.
|
|
352
|
+
- Right: The tool has a log.
|
|
353
|
+
|
|
354
|
+
### SE_SLOP_NOTWITHSTANDING: but, not that being said
|
|
355
|
+
|
|
356
|
+
Write but.
|
|
357
|
+
|
|
358
|
+
- Wrong: The tool works. That being said, it is slow.
|
|
359
|
+
- Right: The tool works, but it is slow.
|
|
360
|
+
|
|
361
|
+
### SE_SLOP_NOTWITHSTANDING2: but, not notwithstanding
|
|
362
|
+
|
|
363
|
+
Write but.
|
|
364
|
+
|
|
365
|
+
- Wrong: Notwithstanding the log, the tool fails.
|
|
366
|
+
- Right: The log exists, but the tool fails.
|
|
367
|
+
|
|
368
|
+
### SE_SLOP_DELETE_ADVERBS: delete empty adverbs
|
|
369
|
+
|
|
370
|
+
Delete it. It carries no fact.
|
|
371
|
+
|
|
372
|
+
- Wrong: The tool works seamlessly.
|
|
373
|
+
- Right: The tool works.
|
|
374
|
+
|
|
375
|
+
### SE_SLOP_JUST: delete just
|
|
376
|
+
|
|
377
|
+
Delete it. It carries no fact.
|
|
378
|
+
|
|
379
|
+
- Wrong: The tool just works.
|
|
380
|
+
- Right: The tool works.
|
|
381
|
+
|
|
382
|
+
### SE_SLOP_DELETE_ADJ: delete empty adjectives
|
|
383
|
+
|
|
384
|
+
Delete it, or give the measurable property.
|
|
385
|
+
|
|
386
|
+
- Wrong: The tool is robust.
|
|
387
|
+
- Right: The tool retries three times, then stops.
|
|
388
|
+
|
|
389
|
+
### SE_SLOP_WORTH_NOTING: delete it is worth noting
|
|
390
|
+
|
|
391
|
+
Delete it. State the fact.
|
|
392
|
+
|
|
393
|
+
- Wrong: It is worth noting that the tool is slow.
|
|
394
|
+
- Right: The tool is slow.
|
|
395
|
+
|
|
396
|
+
### SE_SLOP_IMPORTANT_TO: delete it is important to
|
|
397
|
+
|
|
398
|
+
Delete it. State the fact.
|
|
399
|
+
|
|
400
|
+
- Wrong: It is important to read the log.
|
|
401
|
+
- Right: Read the log.
|
|
402
|
+
|
|
403
|
+
### SE_SLOP_DESIGNED_TO: delete is designed to
|
|
404
|
+
|
|
405
|
+
Say what the tool does.
|
|
406
|
+
|
|
407
|
+
- Wrong: The tool is designed to read logs.
|
|
408
|
+
- Right: The tool reads logs.
|
|
409
|
+
|
|
410
|
+
### SE_SLOP_AIMS_TO: delete aims to
|
|
411
|
+
|
|
412
|
+
Say what the tool does.
|
|
413
|
+
|
|
414
|
+
- Wrong: The tool aims to read logs.
|
|
415
|
+
- Right: The tool reads logs.
|
|
416
|
+
|
|
417
|
+
### SE_SLOP_AS_NEEDED: state the condition, not as needed
|
|
418
|
+
|
|
419
|
+
State the condition.
|
|
420
|
+
|
|
421
|
+
- Wrong: Restart the tool as needed.
|
|
422
|
+
- Right: Restart the tool every day.
|
|
423
|
+
|
|
424
|
+
### SE_SLOP_GRACEFULLY: say what it does, not gracefully handles
|
|
425
|
+
|
|
426
|
+
Say what the tool does: "retries three times, then stops".
|
|
427
|
+
|
|
428
|
+
- Wrong: The tool gracefully handles the error.
|
|
429
|
+
- Right: The tool retries three times, then stops.
|
|
430
|
+
|
|
431
|
+
### SE_SLOP_IN_CONCLUSION: delete in conclusion
|
|
432
|
+
|
|
433
|
+
Delete it. State the fact.
|
|
434
|
+
|
|
435
|
+
- Wrong: In conclusion, the tool works.
|
|
436
|
+
- Right: The tool works.
|
|
437
|
+
|
|
438
|
+
### SE_SLOP_IN_SUMMARY: delete in summary
|
|
439
|
+
|
|
440
|
+
Delete it. State the fact.
|
|
441
|
+
|
|
442
|
+
- Wrong: In summary, the tool works.
|
|
443
|
+
- Right: The tool works.
|
|
444
|
+
|
|
445
|
+
### SE_SLOP_AT_END_OF_DAY: delete at the end of the day
|
|
446
|
+
|
|
447
|
+
Delete it. State the fact.
|
|
448
|
+
|
|
449
|
+
- Wrong: At the end of the day, the tool works.
|
|
450
|
+
- Right: The tool works.
|
|
451
|
+
|
|
452
|
+
### SE_SLOP_NESTLED: give the location, not nestled
|
|
453
|
+
|
|
454
|
+
Give the location.
|
|
455
|
+
|
|
456
|
+
- Wrong: The file is nestled in the folder.
|
|
457
|
+
- Right: The file sits in the folder.
|
|
458
|
+
|
|
459
|
+
### SE_SLOP_BUSTLING: busy, not bustling
|
|
460
|
+
|
|
461
|
+
Write busy.
|
|
462
|
+
|
|
463
|
+
- Wrong: The bustling market has many files.
|
|
464
|
+
- Right: The busy market has many files.
|
|
465
|
+
|
|
466
|
+
### SE_SLOP_HOPE_HELPS: delete I hope this helps
|
|
467
|
+
|
|
468
|
+
Delete it.
|
|
469
|
+
|
|
470
|
+
- Wrong: I hope this helps. Read the log.
|
|
471
|
+
- Right: Read the log.
|
|
472
|
+
|
|
473
|
+
### SE_SLOP_DIVE_IN: delete let's dive in
|
|
474
|
+
|
|
475
|
+
Delete it.
|
|
476
|
+
|
|
477
|
+
- Wrong: let's dive in. Read the log.
|
|
478
|
+
- Right: Read the log.
|
|
479
|
+
|
|
480
|
+
## Counting rules
|
|
481
|
+
|
|
482
|
+
These rules run in Ruby on Markdown text. Code comments do not use
|
|
483
|
+
them. Procedural text is a list item. Descriptive text is every
|
|
484
|
+
other paragraph.
|
|
485
|
+
|
|
486
|
+
### SE_SENTENCE_TOO_LONG
|
|
487
|
+
|
|
488
|
+
A sentence with more than 20 words in
|
|
489
|
+
procedural text, or more than 25 words
|
|
490
|
+
in descriptive text.
|
|
491
|
+
|
|
492
|
+
### SE_PARAGRAPH_TOO_LONG
|
|
493
|
+
|
|
494
|
+
A paragraph with more than 6
|
|
495
|
+
sentences in descriptive text.
|
|
496
|
+
|