slopless 0.2.17 → 0.2.18

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.
@@ -633,6 +633,7 @@
633
633
  "spread like wildfire",
634
634
  "spring to life",
635
635
  "squeaky wheel gets the grease",
636
+ "stands as a testament to",
636
637
  "stands out like a sore thumb",
637
638
  "start from scratch",
638
639
  "stick in the mud",
@@ -3,7 +3,6 @@
3
3
  "activate the right levers",
4
4
  "apples to apples",
5
5
  "bang for your buck",
6
- "best-in-class solution",
7
6
  "circle back around",
8
7
  "customer-centric innovation",
9
8
  "cross-functional stakeholders",
@@ -35,6 +34,12 @@
35
34
  "synergies across the value chain",
36
35
  "synergy",
37
36
  "take this offline",
37
+ "table stakes",
38
+ "next-level",
39
+ "supercharge",
40
+ "world-class",
41
+ "best-in-class",
42
+ "north star",
38
43
  "think outside the box",
39
44
  "thrown under the bus",
40
45
  "unlock our full potential",
@@ -36,6 +36,21 @@ const PREVIEW_OBJECTS = [
36
36
  const PREVIEW_VERBS = ["explore", "discuss", "examine", "cover"];
37
37
  const REASON_STARTERS = ["reason", "factor", "point", "thing"];
38
38
  const ORDINAL_STARTERS = ["one", "another"];
39
+ // Sentence-initial filler that advertises honesty or clears the throat before
40
+ // the point. Anchored to the start of the sentence to stay low false-positive
41
+ // ("she spoke frankly" does not match; "Frankly, ..." does).
42
+ const FILLER_OPENERS = [
43
+ "to be clear",
44
+ "to be honest",
45
+ "let me be clear",
46
+ "let me be honest",
47
+ "in all honesty",
48
+ "here's the thing",
49
+ "here's the kicker",
50
+ "honestly",
51
+ "frankly",
52
+ "candidly"
53
+ ];
39
54
  function matchEnumerationPreface(words) {
40
55
  if (words.some((word) => VAGUE_INTROS.includes(word)) &&
41
56
  words.some((word) => CATEGORY_WORDS.includes(word)) &&
@@ -81,6 +96,13 @@ function matchBoilerplateFraming(sentence) {
81
96
  if (starter !== undefined) {
82
97
  matches.push(starter);
83
98
  }
99
+ const lowered = stripped
100
+ .toLocaleLowerCase("en")
101
+ .replaceAll(String.fromCharCode(0x2019), "'");
102
+ const filler = FILLER_OPENERS.find((opener) => lowered.startsWith(opener));
103
+ if (filler !== undefined) {
104
+ matches.push(filler);
105
+ }
84
106
  return matches;
85
107
  }
86
108
  const rule = oneToOneRule({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slopless",
3
- "version": "0.2.17",
3
+ "version": "0.2.18",
4
4
  "description": "Deterministic textlint rules and CLI for catching prose slop in English Markdown.",
5
5
  "keywords": [
6
6
  "textlint",