slopless 0.2.4 → 0.2.6
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 +18 -106
- package/dist/adapters/textlint/report.js +51 -0
- package/dist/adapters/textlint/report.js.map +1 -0
- package/dist/adapters/textlint/units.js +28 -0
- package/dist/adapters/textlint/units.js.map +1 -0
- package/dist/cli.js +16 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/presets/everything.js +8 -1
- package/dist/presets/everything.js.map +1 -1
- package/dist/registries/academic-slop.js +5 -0
- package/dist/registries/academic-slop.js.map +1 -0
- package/dist/registries/metrics.js +6 -6
- package/dist/registries/metrics.js.map +1 -1
- package/dist/registries/narrative-slop.js +11 -0
- package/dist/registries/narrative-slop.js.map +1 -0
- package/dist/registries/orthography.js +6 -6
- package/dist/registries/orthography.js.map +1 -1
- package/dist/registries/phrases.js +13 -9
- package/dist/registries/phrases.js.map +1 -1
- package/dist/registries/semantic-thinness.js +1 -1
- package/dist/registries/semantic-thinness.js.map +1 -1
- package/dist/registries/syntactic-patterns/authority.js +1 -1
- package/dist/registries/syntactic-patterns/authority.js.map +1 -1
- package/dist/registries/syntactic-patterns/closers.js +4 -4
- package/dist/registries/syntactic-patterns/closers.js.map +1 -1
- package/dist/registries/syntactic-patterns/contrast.js +3 -3
- package/dist/registries/syntactic-patterns/contrast.js.map +1 -1
- package/dist/registries/syntactic-patterns/generalization.js +2 -2
- package/dist/registries/syntactic-patterns/generalization.js.map +1 -1
- package/dist/registries/syntactic-patterns/lead-ins.js +5 -5
- package/dist/registries/syntactic-patterns/lead-ins.js.map +1 -1
- package/dist/registries/syntactic-patterns/llm-artifacts.js +1 -1
- package/dist/registries/syntactic-patterns/llm-artifacts.js.map +1 -1
- package/dist/registries/syntactic-patterns/repetition.js +4 -4
- package/dist/registries/syntactic-patterns/repetition.js.map +1 -1
- package/dist/registries/term-policy.js +2 -2
- package/dist/registries/term-policy.js.map +1 -1
- package/dist/registries/words.js +4 -4
- package/dist/registries/words.js.map +1 -1
- package/dist/reporting/reports.js +92 -0
- package/dist/reporting/reports.js.map +1 -0
- package/dist/reporting/types.js +2 -0
- package/dist/reporting/types.js.map +1 -0
- package/dist/rules/academic-slop/data/tortured-phrases.json +8 -0
- package/dist/rules/academic-slop/tortured-phrases.js +27 -0
- package/dist/rules/academic-slop/tortured-phrases.js.map +1 -0
- package/dist/{families → rules}/metrics/avg-sentence-length.js +8 -4
- package/dist/rules/metrics/avg-sentence-length.js.map +1 -0
- package/dist/{families → rules}/metrics/coleman-liau.js +8 -4
- package/dist/rules/metrics/coleman-liau.js.map +1 -0
- package/dist/{families → rules}/metrics/flesch-kincaid.js +8 -4
- package/dist/rules/metrics/flesch-kincaid.js.map +1 -0
- package/dist/{families → rules}/metrics/gunning-fog.js +8 -4
- package/dist/rules/metrics/gunning-fog.js.map +1 -0
- package/dist/rules/metrics/paragraph-length.js +25 -0
- package/dist/rules/metrics/paragraph-length.js.map +1 -0
- package/dist/{families → rules}/metrics/word-repetition.js +8 -4
- package/dist/rules/metrics/word-repetition.js.map +1 -0
- package/dist/rules/narrative-slop/body-action-density.js +198 -0
- package/dist/rules/narrative-slop/body-action-density.js.map +1 -0
- package/dist/rules/narrative-slop/data/narrative-cliches.json +134 -0
- package/dist/rules/narrative-slop/flat-action-cadence.js +322 -0
- package/dist/rules/narrative-slop/flat-action-cadence.js.map +1 -0
- package/dist/rules/narrative-slop/narrative-cliches.js +46 -0
- package/dist/rules/narrative-slop/narrative-cliches.js.map +1 -0
- package/dist/rules/narrative-slop/perception-verb-density.js +84 -0
- package/dist/rules/narrative-slop/perception-verb-density.js.map +1 -0
- package/dist/{families → rules}/orthography/colon-dramatic.js +11 -7
- package/dist/rules/orthography/colon-dramatic.js.map +1 -0
- package/dist/{families → rules}/orthography/em-dashes.js +11 -7
- package/dist/rules/orthography/em-dashes.js.map +1 -0
- package/dist/{families → rules}/orthography/exclamation-density.js +11 -7
- package/dist/rules/orthography/exclamation-density.js.map +1 -0
- package/dist/{families → rules}/orthography/fake-timestamps.js +11 -7
- package/dist/rules/orthography/fake-timestamps.js.map +1 -0
- package/dist/{families → rules}/orthography/sentence-case.js +7 -2
- package/dist/rules/orthography/sentence-case.js.map +1 -0
- package/dist/{families → rules}/orthography/smart-quotes.js +11 -7
- package/dist/rules/orthography/smart-quotes.js.map +1 -0
- package/dist/rules/phrases/cliches.js +43 -0
- package/dist/rules/phrases/cliches.js.map +1 -0
- package/dist/rules/phrases/corporate-speak.js +32 -0
- package/dist/rules/phrases/corporate-speak.js.map +1 -0
- package/dist/rules/phrases/data/cliche-templates.json +20 -0
- package/dist/{families → rules}/phrases/data/cliches.json +73 -1
- package/dist/rules/phrases/data/corporate-abstraction-patterns.json +80 -0
- package/dist/{families → rules}/phrases/data/corporate-speak.json +0 -3
- package/dist/rules/phrases/data/llm-disclaimer-expansions.json +4 -0
- package/dist/{families → rules}/phrases/data/prohibited-phrases.json +0 -1
- package/dist/rules/phrases/data/redundancy-patterns.json +74 -0
- package/dist/rules/phrases/data/wordiness-patterns.json +53 -0
- package/dist/rules/phrases/humble-bragger.js +30 -0
- package/dist/rules/phrases/humble-bragger.js.map +1 -0
- package/dist/{families → rules}/phrases/jargon-faker.js +11 -7
- package/dist/rules/phrases/jargon-faker.js.map +1 -0
- package/dist/{families → rules}/phrases/llm-disclaimer.js +21 -8
- package/dist/rules/phrases/llm-disclaimer.js.map +1 -0
- package/dist/rules/phrases/prohibited-phrases.js +27 -0
- package/dist/rules/phrases/prohibited-phrases.js.map +1 -0
- package/dist/rules/phrases/redundancy.js +27 -0
- package/dist/rules/phrases/redundancy.js.map +1 -0
- package/dist/{families → rules}/phrases/skunked-terms.js +8 -4
- package/dist/rules/phrases/skunked-terms.js.map +1 -0
- package/dist/{families → rules}/phrases/uncomparables.js +8 -4
- package/dist/rules/phrases/uncomparables.js.map +1 -0
- package/dist/rules/phrases/wordiness.js +27 -0
- package/dist/rules/phrases/wordiness.js.map +1 -0
- package/dist/rules/semantic-thinness/patterns/abstract-personification-line.json +23 -0
- package/dist/rules/semantic-thinness/patterns/emotion-as-substance.json +95 -0
- package/dist/rules/semantic-thinness/patterns/fixed-metaphor-frame.json +32 -0
- package/dist/rules/semantic-thinness/patterns/sensory-instead-of-frame.json +40 -0
- package/dist/rules/semantic-thinness/patterns/summary-fog-transition.json +30 -0
- package/dist/{families → rules}/semantic-thinness/private/pattern-data-a.js +2 -0
- package/dist/rules/semantic-thinness/private/pattern-data-a.js.map +1 -0
- package/dist/rules/semantic-thinness/private/pattern-data-b.js.map +1 -0
- package/dist/rules/semantic-thinness/private/pattern-data-c.js +17 -0
- package/dist/rules/semantic-thinness/private/pattern-data-c.js.map +1 -0
- package/dist/rules/semantic-thinness/private/pattern-data-d.js.map +1 -0
- package/dist/rules/semantic-thinness/private/pattern-data.js.map +1 -0
- package/dist/rules/semantic-thinness/private/pattern-matcher.js.map +1 -0
- package/dist/{families → rules}/semantic-thinness/semantic-thinness.js +11 -7
- package/dist/rules/semantic-thinness/semantic-thinness.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/authority/authority-padding.js +11 -7
- package/dist/rules/syntactic-patterns/authority/authority-padding.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/closers/affirmation-closers.js +20 -13
- package/dist/rules/syntactic-patterns/closers/affirmation-closers.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/closers/boilerplate-conclusion.js +11 -7
- package/dist/rules/syntactic-patterns/closers/boilerplate-conclusion.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/closers/false-question.js +11 -7
- package/dist/rules/syntactic-patterns/closers/false-question.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/closers/summative-closer.js +11 -7
- package/dist/rules/syntactic-patterns/closers/summative-closer.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/contrast/blame-reframe.js +11 -7
- package/dist/rules/syntactic-patterns/contrast/blame-reframe.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/contrast/contrastive-aphorism.js +10 -7
- package/dist/rules/syntactic-patterns/contrast/contrastive-aphorism.js.map +1 -0
- package/dist/rules/syntactic-patterns/contrast/negation-reframe.js +24 -0
- package/dist/rules/syntactic-patterns/contrast/negation-reframe.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/contrast/private/negation-reframe-matcher.js +22 -5
- package/dist/rules/syntactic-patterns/contrast/private/negation-reframe-matcher.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/contrast/private/negation-reframe-parts.js +55 -0
- package/dist/rules/syntactic-patterns/contrast/private/negation-reframe-parts.js.map +1 -0
- package/dist/rules/syntactic-patterns/contrast/private/negative-slop-frames.js +103 -0
- package/dist/rules/syntactic-patterns/contrast/private/negative-slop-frames.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/generalization/softening-language.js +11 -7
- package/dist/rules/syntactic-patterns/generalization/softening-language.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/generalization/universalizing-claims.js +11 -7
- package/dist/rules/syntactic-patterns/generalization/universalizing-claims.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/lead-ins/boilerplate-framing.js +11 -7
- package/dist/rules/syntactic-patterns/lead-ins/boilerplate-framing.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/lead-ins/generic-signposting.js +11 -7
- package/dist/rules/syntactic-patterns/lead-ins/generic-signposting.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/lead-ins/lesson-framing.js +11 -7
- package/dist/rules/syntactic-patterns/lead-ins/lesson-framing.js.map +1 -0
- package/dist/rules/syntactic-patterns/lead-ins/llm-openers.js +28 -0
- package/dist/rules/syntactic-patterns/lead-ins/llm-openers.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/lead-ins/observer-guidance.js +11 -7
- package/dist/rules/syntactic-patterns/lead-ins/observer-guidance.js.map +1 -0
- package/dist/rules/syntactic-patterns/llm-artifacts/data/response-wrapper-patterns.json +33 -0
- package/dist/{families → rules}/syntactic-patterns/llm-artifacts/response-wrapper.js +55 -10
- package/dist/rules/syntactic-patterns/llm-artifacts/response-wrapper.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/repetition/demonstrative-emphasis.js +11 -7
- package/dist/rules/syntactic-patterns/repetition/demonstrative-emphasis.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/repetition/empty-emphasis.js +11 -7
- package/dist/rules/syntactic-patterns/repetition/empty-emphasis.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/repetition/fragment-stacking.js +11 -7
- package/dist/rules/syntactic-patterns/repetition/fragment-stacking.js.map +1 -0
- package/dist/{families → rules}/syntactic-patterns/repetition/triple-repeat.js +13 -9
- package/dist/rules/syntactic-patterns/repetition/triple-repeat.js.map +1 -0
- package/dist/{families → rules}/term-policy/recommended-terms.js +8 -4
- package/dist/rules/term-policy/recommended-terms.js.map +1 -0
- package/dist/{families → rules}/term-policy/required-terms.js +8 -4
- package/dist/rules/term-policy/required-terms.js.map +1 -0
- package/dist/rules/types.js +2 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/{families → rules}/words/hedge-stacking.js +11 -7
- package/dist/rules/words/hedge-stacking.js.map +1 -0
- package/dist/{families → rules}/words/llm-vocabulary.js +8 -4
- package/dist/rules/words/llm-vocabulary.js.map +1 -0
- package/dist/rules/words/prohibited-words.js +21 -0
- package/dist/rules/words/prohibited-words.js.map +1 -0
- package/dist/{families → rules}/words/simplicity.js +11 -7
- package/dist/rules/words/simplicity.js.map +1 -0
- package/dist/shared/matchers/phrases.js +74 -0
- package/dist/shared/matchers/phrases.js.map +1 -1
- package/package.json +58 -49
- package/slopless.textlintrc.json +5 -0
- package/dist/families/metrics/avg-sentence-length.js.map +0 -1
- package/dist/families/metrics/coleman-liau.js.map +0 -1
- package/dist/families/metrics/flesch-kincaid.js.map +0 -1
- package/dist/families/metrics/gunning-fog.js.map +0 -1
- package/dist/families/metrics/paragraph-length.js +0 -21
- package/dist/families/metrics/paragraph-length.js.map +0 -1
- package/dist/families/metrics/word-repetition.js.map +0 -1
- package/dist/families/orthography/colon-dramatic.js.map +0 -1
- package/dist/families/orthography/em-dashes.js.map +0 -1
- package/dist/families/orthography/exclamation-density.js.map +0 -1
- package/dist/families/orthography/fake-timestamps.js.map +0 -1
- package/dist/families/orthography/sentence-case.js.map +0 -1
- package/dist/families/orthography/smart-quotes.js.map +0 -1
- package/dist/families/phrases/cliches.js +0 -17
- package/dist/families/phrases/cliches.js.map +0 -1
- package/dist/families/phrases/corporate-speak.js +0 -23
- package/dist/families/phrases/corporate-speak.js.map +0 -1
- package/dist/families/phrases/humble-bragger.js +0 -26
- package/dist/families/phrases/humble-bragger.js.map +0 -1
- package/dist/families/phrases/jargon-faker.js.map +0 -1
- package/dist/families/phrases/llm-disclaimer.js.map +0 -1
- package/dist/families/phrases/prohibited-phrases.js +0 -17
- package/dist/families/phrases/prohibited-phrases.js.map +0 -1
- package/dist/families/phrases/skunked-terms.js.map +0 -1
- package/dist/families/phrases/uncomparables.js.map +0 -1
- package/dist/families/semantic-thinness/private/pattern-data-a.js.map +0 -1
- package/dist/families/semantic-thinness/private/pattern-data-b.js.map +0 -1
- package/dist/families/semantic-thinness/private/pattern-data-c.js +0 -9
- package/dist/families/semantic-thinness/private/pattern-data-c.js.map +0 -1
- package/dist/families/semantic-thinness/private/pattern-data-d.js.map +0 -1
- package/dist/families/semantic-thinness/private/pattern-data.js.map +0 -1
- package/dist/families/semantic-thinness/private/pattern-matcher.js.map +0 -1
- package/dist/families/semantic-thinness/semantic-thinness.js.map +0 -1
- package/dist/families/syntactic-patterns/authority/authority-padding.js.map +0 -1
- package/dist/families/syntactic-patterns/closers/affirmation-closers.js.map +0 -1
- package/dist/families/syntactic-patterns/closers/boilerplate-conclusion.js.map +0 -1
- package/dist/families/syntactic-patterns/closers/false-question.js.map +0 -1
- package/dist/families/syntactic-patterns/closers/summative-closer.js.map +0 -1
- package/dist/families/syntactic-patterns/contrast/blame-reframe.js.map +0 -1
- package/dist/families/syntactic-patterns/contrast/contrastive-aphorism.js.map +0 -1
- package/dist/families/syntactic-patterns/contrast/negation-reframe.js +0 -20
- package/dist/families/syntactic-patterns/contrast/negation-reframe.js.map +0 -1
- package/dist/families/syntactic-patterns/contrast/private/negation-reframe-matcher.js.map +0 -1
- package/dist/families/syntactic-patterns/contrast/private/negation-reframe-parts.js.map +0 -1
- package/dist/families/syntactic-patterns/generalization/softening-language.js.map +0 -1
- package/dist/families/syntactic-patterns/generalization/universalizing-claims.js.map +0 -1
- package/dist/families/syntactic-patterns/lead-ins/boilerplate-framing.js.map +0 -1
- package/dist/families/syntactic-patterns/lead-ins/generic-signposting.js.map +0 -1
- package/dist/families/syntactic-patterns/lead-ins/lesson-framing.js.map +0 -1
- package/dist/families/syntactic-patterns/lead-ins/llm-openers.js +0 -24
- package/dist/families/syntactic-patterns/lead-ins/llm-openers.js.map +0 -1
- package/dist/families/syntactic-patterns/lead-ins/observer-guidance.js.map +0 -1
- package/dist/families/syntactic-patterns/llm-artifacts/response-wrapper.js.map +0 -1
- package/dist/families/syntactic-patterns/repetition/demonstrative-emphasis.js.map +0 -1
- package/dist/families/syntactic-patterns/repetition/empty-emphasis.js.map +0 -1
- package/dist/families/syntactic-patterns/repetition/fragment-stacking.js.map +0 -1
- package/dist/families/syntactic-patterns/repetition/triple-repeat.js.map +0 -1
- package/dist/families/term-policy/recommended-terms.js.map +0 -1
- package/dist/families/term-policy/required-terms.js.map +0 -1
- package/dist/families/words/hedge-stacking.js.map +0 -1
- package/dist/families/words/llm-vocabulary.js.map +0 -1
- package/dist/families/words/prohibited-words.js +0 -17
- package/dist/families/words/prohibited-words.js.map +0 -1
- package/dist/families/words/simplicity.js.map +0 -1
- /package/dist/{families → rules}/phrases/data/skunked-terms.json +0 -0
- /package/dist/{families → rules}/phrases/data/uncomparables.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/abstract-contrast.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/abstract-metaphor-claim.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/body-emotion-shorthand.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/body-knows.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/deictic-summary.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/empty-atmosphere-shift.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/empty-emotional-weather.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/empty-scene-state.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/empty-scene-transition.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/gaze-choreography.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/generic-lesson-extraction.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/generic-pressure-or-stakes.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/generic-realization.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/hollow-significance.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/low-information-physical-blocking.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/point-is-frame.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/real-work-begins.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/silence-as-actor.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/something-shifted.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/truth-answer-moves.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/vague-connective-payoff.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/patterns/vague-threshold-change.json +0 -0
- /package/dist/{families → rules}/semantic-thinness/private/pattern-data-b.js +0 -0
- /package/dist/{families → rules}/semantic-thinness/private/pattern-data-d.js +0 -0
- /package/dist/{families → rules}/semantic-thinness/private/pattern-data.js +0 -0
- /package/dist/{families → rules}/semantic-thinness/private/pattern-matcher.js +0 -0
- /package/dist/{families → rules}/words/data/prohibited-words.json +0 -0
- /package/dist/{families → rules}/words/data/simplicity-pairs.json +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { findPhraseMatches } from "../../shared/matchers/phrases.js";
|
|
2
2
|
import { allParagraphSentences } from "../../shared/text/sections.js";
|
|
3
3
|
import { wordTokens } from "../../shared/text/tokens.js";
|
|
4
|
+
import { emitTextlintFinding } from "../../adapters/textlint/report.js";
|
|
4
5
|
const JARGON_FAKER_PHRASES = [
|
|
5
6
|
"debug our",
|
|
6
7
|
"debug your",
|
|
@@ -61,7 +62,7 @@ function isLiteralTechnicalUse(sentence, phrase, end) {
|
|
|
61
62
|
return false;
|
|
62
63
|
}
|
|
63
64
|
const rule = (context) => {
|
|
64
|
-
const { Syntax
|
|
65
|
+
const { Syntax } = context;
|
|
65
66
|
return {
|
|
66
67
|
[Syntax.Document](node) {
|
|
67
68
|
for (const item of allParagraphSentences(node)) {
|
|
@@ -69,12 +70,15 @@ const rule = (context) => {
|
|
|
69
70
|
if (isLiteralTechnicalUse(item.sentence.text, match.phrase, match.end)) {
|
|
70
71
|
continue;
|
|
71
72
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
emitTextlintFinding(context, {
|
|
74
|
+
node: item.paragraph,
|
|
75
|
+
ruleId: "phrases:jargon-faker",
|
|
76
|
+
message: `Fake jargon phrase found: "${match.text}". Replace the borrowed tech metaphor with plain language.`,
|
|
77
|
+
range: {
|
|
78
|
+
start: item.source.originalStartFor(item.sentence.start + match.start),
|
|
79
|
+
end: item.source.originalEndFor(item.sentence.start + match.end)
|
|
80
|
+
}
|
|
81
|
+
});
|
|
78
82
|
}
|
|
79
83
|
}
|
|
80
84
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jargon-faker.js","sourceRoot":"","sources":["../../../src/rules/phrases/jargon-faker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { cleanSentence, containsAny, textStartsWithPattern } from "../../shared/matchers/prose-patterns.js";
|
|
2
2
|
import { allParagraphSentences } from "../../shared/text/sections.js";
|
|
3
|
+
import llmDisclaimerExpansions from "./data/llm-disclaimer-expansions.json" with { type: "json" };
|
|
4
|
+
import { emitTextlintFinding } from "../../adapters/textlint/report.js";
|
|
3
5
|
const START_PATTERNS = [
|
|
4
6
|
"as a language model",
|
|
5
7
|
"as an ai language model",
|
|
@@ -27,12 +29,20 @@ const CONTAINS_PATTERNS = [
|
|
|
27
29
|
"don't have access to real-time data"
|
|
28
30
|
];
|
|
29
31
|
const PREFIXES = ["however, ", "but "];
|
|
32
|
+
const EXPANDED_START_PATTERNS = [
|
|
33
|
+
...START_PATTERNS,
|
|
34
|
+
...llmDisclaimerExpansions.startsWith
|
|
35
|
+
];
|
|
36
|
+
const EXPANDED_CONTAINS_PATTERNS = [
|
|
37
|
+
...CONTAINS_PATTERNS,
|
|
38
|
+
...llmDisclaimerExpansions.contains
|
|
39
|
+
];
|
|
30
40
|
function matchDisclaimer(sentence) {
|
|
31
41
|
const stripped = cleanSentence(sentence, PREFIXES);
|
|
32
|
-
return (
|
|
42
|
+
return (EXPANDED_START_PATTERNS.find((pattern) => textStartsWithPattern(stripped, pattern)) ?? containsAny(stripped, EXPANDED_CONTAINS_PATTERNS));
|
|
33
43
|
}
|
|
34
44
|
const rule = (context) => {
|
|
35
|
-
const { Syntax
|
|
45
|
+
const { Syntax } = context;
|
|
36
46
|
return {
|
|
37
47
|
[Syntax.Document](node) {
|
|
38
48
|
for (const item of allParagraphSentences(node)) {
|
|
@@ -40,12 +50,15 @@ const rule = (context) => {
|
|
|
40
50
|
if (matched === undefined) {
|
|
41
51
|
continue;
|
|
42
52
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
53
|
+
emitTextlintFinding(context, {
|
|
54
|
+
node: item.paragraph,
|
|
55
|
+
ruleId: "phrases:llm-disclaimer",
|
|
56
|
+
message: `LLM disclaimer found: "${matched}". Remove assistant leakage.`,
|
|
57
|
+
range: {
|
|
58
|
+
start: item.source.originalStartFor(item.sentence.start),
|
|
59
|
+
end: item.source.originalEndFor(item.sentence.end)
|
|
60
|
+
}
|
|
61
|
+
});
|
|
49
62
|
}
|
|
50
63
|
}
|
|
51
64
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-disclaimer.js","sourceRoot":"","sources":["../../../src/rules/phrases/llm-disclaimer.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EACb,WAAW,EACX,qBAAqB,EACtB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,uBAAuB,MAAM,uCAAuC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,cAAc,GAAG;IACrB,qBAAqB;IACrB,yBAAyB;IACzB,wBAAwB;IACxB,2BAA2B;IAC3B,2BAA2B;IAC3B,gCAAgC;IAChC,6BAA6B;IAC7B,mCAAmC;IACnC,kCAAkC;IAClC,yBAAyB;IACzB,wBAAwB;CACzB,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACxB,8BAA8B;IAC9B,0BAA0B;IAC1B,2BAA2B;IAC3B,uBAAuB;IACvB,0BAA0B;IAC1B,qCAAqC;IACrC,2BAA2B;IAC3B,6CAA6C;IAC7C,4CAA4C;IAC5C,sCAAsC;IACtC,qCAAqC;CACtC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAEvC,MAAM,uBAAuB,GAAG;IAC9B,GAAG,cAAc;IACjB,GAAG,uBAAuB,CAAC,UAAU;CACtC,CAAC;AAEF,MAAM,0BAA0B,GAAG;IACjC,GAAG,iBAAiB;IACpB,GAAG,uBAAuB,CAAC,QAAQ;CACpC,CAAC;AAEF,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEnD,OAAO,CACL,uBAAuB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CACvC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CACzC,IAAI,WAAW,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CACvD,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAAuB,CAAC,OAAO,EAAE,EAAE;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3B,OAAO;QACL,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAqB;YACrC,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAEpD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBAED,mBAAmB,CAAC,OAAO,EAAE;oBAC3B,IAAI,EAAE,IAAI,CAAC,SAAS;oBACpB,MAAM,EAAE,wBAAwB;oBAChC,OAAO,EAAE,0BAA0B,OAAO,8BAA8B;oBACxE,KAAK,EAAE;wBACL,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;wBACxD,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;qBACnD;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { RuleHelper } from "textlint-rule-helper";
|
|
2
|
+
import prohibitedPhrases from "./data/prohibited-phrases.json" with { type: "json" };
|
|
3
|
+
import { findUnquotedPhraseMatches } from "../../shared/matchers/phrases.js";
|
|
4
|
+
import { emitTextlintFinding } from "../../adapters/textlint/report.js";
|
|
5
|
+
const rule = (context) => {
|
|
6
|
+
const { Syntax, getSource } = context;
|
|
7
|
+
const helper = new RuleHelper(context);
|
|
8
|
+
const ignoredParents = [Syntax.Link, Syntax.LinkReference];
|
|
9
|
+
return {
|
|
10
|
+
[Syntax.Str](node) {
|
|
11
|
+
if (helper.isChildNode(node, ignoredParents)) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const text = getSource(node);
|
|
15
|
+
for (const match of findUnquotedPhraseMatches(text, prohibitedPhrases)) {
|
|
16
|
+
emitTextlintFinding(context, {
|
|
17
|
+
node: node,
|
|
18
|
+
ruleId: "phrases:prohibited-phrases",
|
|
19
|
+
message: `Prohibited phrase found: "${match.text}". Rewrite without this phrase.`,
|
|
20
|
+
range: { start: match.start, end: match.end }
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export default rule;
|
|
27
|
+
//# sourceMappingURL=prohibited-phrases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prohibited-phrases.js","sourceRoot":"","sources":["../../../src/rules/phrases/prohibited-phrases.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,iBAAiB,MAAM,gCAAgC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,IAAI,GAAuB,CAAC,OAAO,EAAE,EAAE;IAC3C,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAE3D,OAAO;QACL,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI;YACf,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAE7B,KAAK,MAAM,KAAK,IAAI,yBAAyB,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC;gBACvE,mBAAmB,CAAC,OAAO,EAAE;oBAC3B,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,4BAA4B;oBACpC,OAAO,EAAE,6BAA6B,KAAK,CAAC,IAAI,iCAAiC;oBACjF,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;iBAC9C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { RuleHelper } from "textlint-rule-helper";
|
|
2
|
+
import redundancyPatterns from "./data/redundancy-patterns.json" with { type: "json" };
|
|
3
|
+
import { findUnquotedPhraseMatches } from "../../shared/matchers/phrases.js";
|
|
4
|
+
import { emitTextlintFinding } from "../../adapters/textlint/report.js";
|
|
5
|
+
const rule = (context) => {
|
|
6
|
+
const { Syntax, getSource } = context;
|
|
7
|
+
const helper = new RuleHelper(context);
|
|
8
|
+
const ignoredParents = [Syntax.Link, Syntax.LinkReference];
|
|
9
|
+
return {
|
|
10
|
+
[Syntax.Str](node) {
|
|
11
|
+
if (helper.isChildNode(node, ignoredParents)) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const text = getSource(node);
|
|
15
|
+
for (const match of findUnquotedPhraseMatches(text, redundancyPatterns)) {
|
|
16
|
+
emitTextlintFinding(context, {
|
|
17
|
+
node: node,
|
|
18
|
+
ruleId: "phrases:redundancy",
|
|
19
|
+
message: `Redundant phrase found: "${match.text}". Remove the repeated meaning.`,
|
|
20
|
+
range: { start: match.start, end: match.end }
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export default rule;
|
|
27
|
+
//# sourceMappingURL=redundancy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redundancy.js","sourceRoot":"","sources":["../../../src/rules/phrases/redundancy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,kBAAkB,MAAM,iCAAiC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACvF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,IAAI,GAAuB,CAAC,OAAO,EAAE,EAAE;IAC3C,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAE3D,OAAO;QACL,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI;YACf,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAE7B,KAAK,MAAM,KAAK,IAAI,yBAAyB,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE,CAAC;gBACxE,mBAAmB,CAAC,OAAO,EAAE;oBAC3B,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,oBAAoB;oBAC5B,OAAO,EAAE,4BAA4B,KAAK,CAAC,IAAI,iCAAiC;oBAChF,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;iBAC9C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { RuleHelper } from "textlint-rule-helper";
|
|
2
2
|
import skunkedTerms from "./data/skunked-terms.json" with { type: "json" };
|
|
3
3
|
import { findUnquotedPhraseMatches } from "../../shared/matchers/phrases.js";
|
|
4
|
+
import { emitTextlintFinding } from "../../adapters/textlint/report.js";
|
|
4
5
|
const rule = (context) => {
|
|
5
|
-
const { Syntax,
|
|
6
|
+
const { Syntax, getSource } = context;
|
|
6
7
|
const helper = new RuleHelper(context);
|
|
7
8
|
const ignoredParents = [Syntax.Link, Syntax.LinkReference];
|
|
8
9
|
return {
|
|
@@ -12,9 +13,12 @@ const rule = (context) => {
|
|
|
12
13
|
}
|
|
13
14
|
const text = getSource(node);
|
|
14
15
|
for (const match of findUnquotedPhraseMatches(text, skunkedTerms)) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
emitTextlintFinding(context, {
|
|
17
|
+
node: node,
|
|
18
|
+
ruleId: "phrases:skunked-terms",
|
|
19
|
+
message: `Skunked term found: "${match.text}". Replace it with a less disputed word.`,
|
|
20
|
+
range: { start: match.start, end: match.end }
|
|
21
|
+
});
|
|
18
22
|
}
|
|
19
23
|
}
|
|
20
24
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skunked-terms.js","sourceRoot":"","sources":["../../../src/rules/phrases/skunked-terms.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,YAAY,MAAM,2BAA2B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,IAAI,GAAuB,CAAC,OAAO,EAAE,EAAE;IAC3C,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAE3D,OAAO;QACL,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI;YACf,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAE7B,KAAK,MAAM,KAAK,IAAI,yBAAyB,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC;gBAClE,mBAAmB,CAAC,OAAO,EAAE;oBAC3B,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,uBAAuB;oBAC/B,OAAO,EAAE,wBAAwB,KAAK,CAAC,IAAI,0CAA0C;oBACrF,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;iBAC9C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -3,6 +3,7 @@ import uncomparables from "./data/uncomparables.json" with { type: "json" };
|
|
|
3
3
|
import { findUnquotedPhraseMatches } from "../../shared/matchers/phrases.js";
|
|
4
4
|
import { normalizeForMatch } from "../../shared/text/normalize.js";
|
|
5
5
|
import { wordTokens } from "../../shared/text/tokens.js";
|
|
6
|
+
import { emitTextlintFinding } from "../../adapters/textlint/report.js";
|
|
6
7
|
const EXCEPTION_SEPARATOR = "\u0000";
|
|
7
8
|
function exceptionKey(comparator, adjective) {
|
|
8
9
|
return `${normalizeForMatch(comparator)}${EXCEPTION_SEPARATOR}${normalizeForMatch(adjective)}`;
|
|
@@ -54,7 +55,7 @@ function shouldReport(text, match) {
|
|
|
54
55
|
return !previousTokenIsAt(text, match);
|
|
55
56
|
}
|
|
56
57
|
const rule = (context) => {
|
|
57
|
-
const { Syntax,
|
|
58
|
+
const { Syntax, getSource } = context;
|
|
58
59
|
const helper = new RuleHelper(context);
|
|
59
60
|
const ignoredParents = [Syntax.Link, Syntax.LinkReference];
|
|
60
61
|
return {
|
|
@@ -67,9 +68,12 @@ const rule = (context) => {
|
|
|
67
68
|
if (!shouldReport(text, match)) {
|
|
68
69
|
continue;
|
|
69
70
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
emitTextlintFinding(context, {
|
|
72
|
+
node: node,
|
|
73
|
+
ruleId: "phrases:uncomparables",
|
|
74
|
+
message: `Uncomparable phrase found: "${match.text}". Remove the modifier.`,
|
|
75
|
+
range: { start: match.start, end: match.end }
|
|
76
|
+
});
|
|
73
77
|
}
|
|
74
78
|
}
|
|
75
79
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uncomparables.js","sourceRoot":"","sources":["../../../src/rules/phrases/uncomparables.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { RuleHelper } from "textlint-rule-helper";
|
|
2
|
+
import wordinessPatterns from "./data/wordiness-patterns.json" with { type: "json" };
|
|
3
|
+
import { findUnquotedPhraseMatches } from "../../shared/matchers/phrases.js";
|
|
4
|
+
import { emitTextlintFinding } from "../../adapters/textlint/report.js";
|
|
5
|
+
const rule = (context) => {
|
|
6
|
+
const { Syntax, getSource } = context;
|
|
7
|
+
const helper = new RuleHelper(context);
|
|
8
|
+
const ignoredParents = [Syntax.Link, Syntax.LinkReference];
|
|
9
|
+
return {
|
|
10
|
+
[Syntax.Str](node) {
|
|
11
|
+
if (helper.isChildNode(node, ignoredParents)) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const text = getSource(node);
|
|
15
|
+
for (const match of findUnquotedPhraseMatches(text, wordinessPatterns)) {
|
|
16
|
+
emitTextlintFinding(context, {
|
|
17
|
+
node: node,
|
|
18
|
+
ruleId: "phrases:wordiness",
|
|
19
|
+
message: `Wordy phrase found: "${match.text}". Replace it with direct wording.`,
|
|
20
|
+
range: { start: match.start, end: match.end }
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export default rule;
|
|
27
|
+
//# sourceMappingURL=wordiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wordiness.js","sourceRoot":"","sources":["../../../src/rules/phrases/wordiness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,iBAAiB,MAAM,gCAAgC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,IAAI,GAAuB,CAAC,OAAO,EAAE,EAAE;IAC3C,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAE3D,OAAO;QACL,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI;YACf,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAE7B,KAAK,MAAM,KAAK,IAAI,yBAAyB,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC;gBACvE,mBAAmB,CAAC,OAAO,EAAE;oBAC3B,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,mBAAmB;oBAC3B,OAAO,EAAE,wBAAwB,KAAK,CAAC,IAAI,oCAAoC;oBAC/E,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;iBAC9C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "abstract-personification-line",
|
|
3
|
+
"class": "abstract-personification",
|
|
4
|
+
"purpose": "Catch abstract nouns treated as social actors in short payoff lines without concrete action or cause.",
|
|
5
|
+
"templates": ["{abstractSubject} had no place in {thinContainer}."],
|
|
6
|
+
"slots": {
|
|
7
|
+
"abstractSubject": ["fear"],
|
|
8
|
+
"thinContainer": ["her schedule", "his schedule", "their schedule"]
|
|
9
|
+
},
|
|
10
|
+
"rejectIf": [
|
|
11
|
+
"sentence includes a concrete policy, safety, legal, or logistical reason",
|
|
12
|
+
"sentence includes a cause clause",
|
|
13
|
+
"sentence refers to a literal place allocation"
|
|
14
|
+
],
|
|
15
|
+
"positiveExamples": ["Fear had no place in her schedule."],
|
|
16
|
+
"negativeExamples": [
|
|
17
|
+
"Fear had no place in the posted evacuation plan because the exits were marked and staffed."
|
|
18
|
+
],
|
|
19
|
+
"notes": [
|
|
20
|
+
"This starts with the Sunstone source frame only.",
|
|
21
|
+
"The common matcher rejects full-mode cause clauses such as because."
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "emotion-as-substance",
|
|
3
|
+
"class": "emotion-physicalization",
|
|
4
|
+
"purpose": "Catch abstract emotion or state treated as a physical substance moving through bodies, voices, rooms, or groups.",
|
|
5
|
+
"maxTokens": 14,
|
|
6
|
+
"templates": [
|
|
7
|
+
"the {abstractEmotion} finally {substanceMotion} out of {bodyContainer}.",
|
|
8
|
+
"the {abstractEmotion} {substanceMotion} out of {bodyContainer}.",
|
|
9
|
+
"{abstractEmotion} {substanceMotion} out of {bodyContainer}.",
|
|
10
|
+
"{abstractEmotion} {substanceMotion} over {personTarget}.",
|
|
11
|
+
"{abstractEmotion} {substanceMotion} over {placeTarget}.",
|
|
12
|
+
"{abstractEmotion} {substanceMotion} in {bodyContainer}."
|
|
13
|
+
],
|
|
14
|
+
"slots": {
|
|
15
|
+
"abstractEmotion": [
|
|
16
|
+
"anger",
|
|
17
|
+
"dread",
|
|
18
|
+
"fear",
|
|
19
|
+
"guilt",
|
|
20
|
+
"panic",
|
|
21
|
+
"regret",
|
|
22
|
+
"relief",
|
|
23
|
+
"shame",
|
|
24
|
+
"tension"
|
|
25
|
+
],
|
|
26
|
+
"substanceMotion": [
|
|
27
|
+
"built",
|
|
28
|
+
"coiled",
|
|
29
|
+
"drained",
|
|
30
|
+
"flooded",
|
|
31
|
+
"left",
|
|
32
|
+
"melted",
|
|
33
|
+
"rolled",
|
|
34
|
+
"rose",
|
|
35
|
+
"sat",
|
|
36
|
+
"settled",
|
|
37
|
+
"rested",
|
|
38
|
+
"hung",
|
|
39
|
+
"washed"
|
|
40
|
+
],
|
|
41
|
+
"bodyContainer": [
|
|
42
|
+
"her chest",
|
|
43
|
+
"his chest",
|
|
44
|
+
"their chest",
|
|
45
|
+
"her posture",
|
|
46
|
+
"his posture",
|
|
47
|
+
"their posture",
|
|
48
|
+
"her voice",
|
|
49
|
+
"his voice",
|
|
50
|
+
"their voice",
|
|
51
|
+
"her eyes",
|
|
52
|
+
"his eyes",
|
|
53
|
+
"their eyes"
|
|
54
|
+
],
|
|
55
|
+
"personTarget": [
|
|
56
|
+
"cassia",
|
|
57
|
+
"arden",
|
|
58
|
+
"liska",
|
|
59
|
+
"her",
|
|
60
|
+
"him",
|
|
61
|
+
"them",
|
|
62
|
+
"the girl",
|
|
63
|
+
"the group"
|
|
64
|
+
],
|
|
65
|
+
"placeTarget": [
|
|
66
|
+
"the room",
|
|
67
|
+
"the yard",
|
|
68
|
+
"the courtyard",
|
|
69
|
+
"the alley",
|
|
70
|
+
"the group",
|
|
71
|
+
"the table"
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
"rejectIf": [
|
|
75
|
+
"sentence describes a literal fluid, wax, gas, weather, or measured physical substance",
|
|
76
|
+
"sentence includes a cause clause",
|
|
77
|
+
"sentence names the concrete action causing the feeling"
|
|
78
|
+
],
|
|
79
|
+
"positiveExamples": [
|
|
80
|
+
"The anger finally melted out of her posture.",
|
|
81
|
+
"Relief washed over Cassia.",
|
|
82
|
+
"Tension settled over the room.",
|
|
83
|
+
"Panic rose in her chest.",
|
|
84
|
+
"Regret rested in his voice."
|
|
85
|
+
],
|
|
86
|
+
"negativeExamples": [
|
|
87
|
+
"The wax melted out of the mold because the kiln overheated.",
|
|
88
|
+
"Water washed over the stones after the bucket tipped.",
|
|
89
|
+
"The measured tension settled after the cable was loosened."
|
|
90
|
+
],
|
|
91
|
+
"notes": [
|
|
92
|
+
"The slots deliberately abstract the emotion as a moving physical substance.",
|
|
93
|
+
"This catches stock emotional physics, not literal physical substances."
|
|
94
|
+
]
|
|
95
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "fixed-metaphor-frame",
|
|
3
|
+
"class": "fixed-metaphor",
|
|
4
|
+
"purpose": "Catch fixed scene metaphors that present a place as a stock metaphor of stacked image nouns.",
|
|
5
|
+
"templates": [
|
|
6
|
+
"{placeSubject} was a {metaphorNoun} of {imageNoun} and {imageNoun}."
|
|
7
|
+
],
|
|
8
|
+
"slots": {
|
|
9
|
+
"placeSubject": [
|
|
10
|
+
"the south pier",
|
|
11
|
+
"the pier",
|
|
12
|
+
"the catwalk",
|
|
13
|
+
"the courtyard"
|
|
14
|
+
],
|
|
15
|
+
"metaphorNoun": ["graveyard", "tightrope", "maze"],
|
|
16
|
+
"imageNoun": ["shadows", "salt spray", "dust", "ash", "vipers", "smoke"]
|
|
17
|
+
},
|
|
18
|
+
"rejectIf": [
|
|
19
|
+
"sentence uses the noun literally",
|
|
20
|
+
"sentence includes concrete damage, history, measurement, or source detail",
|
|
21
|
+
"sentence includes a cause clause"
|
|
22
|
+
],
|
|
23
|
+
"positiveExamples": [
|
|
24
|
+
"The south pier was a graveyard of shadows and salt spray."
|
|
25
|
+
],
|
|
26
|
+
"negativeExamples": [
|
|
27
|
+
"The south pier was a graveyard after the storm destroyed twelve boats."
|
|
28
|
+
],
|
|
29
|
+
"notes": [
|
|
30
|
+
"The frame is intentionally narrow: place plus was a metaphor noun of two image nouns."
|
|
31
|
+
]
|
|
32
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "sensory-instead-of-frame",
|
|
3
|
+
"class": "sensory-substitution",
|
|
4
|
+
"purpose": "Catch sensory atmosphere substitution frames that replace concrete scene information with stacked scent nouns.",
|
|
5
|
+
"maxTokens": 16,
|
|
6
|
+
"templates": [
|
|
7
|
+
"{placeSubject} smelled of {sensoryNoun} and {sensoryNoun} instead of {expectedScent}."
|
|
8
|
+
],
|
|
9
|
+
"slots": {
|
|
10
|
+
"placeSubject": [
|
|
11
|
+
"the courtyard",
|
|
12
|
+
"the yard",
|
|
13
|
+
"the morning yard",
|
|
14
|
+
"the market"
|
|
15
|
+
],
|
|
16
|
+
"sensoryNoun": [
|
|
17
|
+
"disturbed dust",
|
|
18
|
+
"old ash",
|
|
19
|
+
"dry tea",
|
|
20
|
+
"old hemp",
|
|
21
|
+
"smoke",
|
|
22
|
+
"salt"
|
|
23
|
+
],
|
|
24
|
+
"expectedScent": ["hot metal", "oil", "fresh bread", "wet stone"]
|
|
25
|
+
},
|
|
26
|
+
"rejectIf": [
|
|
27
|
+
"sentence includes a concrete source for the smell",
|
|
28
|
+
"sentence includes a cause clause",
|
|
29
|
+
"sentence identifies the object producing the odor"
|
|
30
|
+
],
|
|
31
|
+
"positiveExamples": [
|
|
32
|
+
"The courtyard smelled of disturbed dust and old ash instead of hot metal."
|
|
33
|
+
],
|
|
34
|
+
"negativeExamples": [
|
|
35
|
+
"The courtyard smelled of ash because the kiln had cracked during firing."
|
|
36
|
+
],
|
|
37
|
+
"notes": [
|
|
38
|
+
"This targets the explicit instead-of scent substitution frame, not ordinary concrete smell description."
|
|
39
|
+
]
|
|
40
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "summary-fog-transition",
|
|
3
|
+
"class": "summary-fog",
|
|
4
|
+
"purpose": "Catch vague transition lines that replace an event sequence with blur, haze, or fog.",
|
|
5
|
+
"templates": ["{summarySpan} was a {fogNoun}."],
|
|
6
|
+
"slots": {
|
|
7
|
+
"summarySpan": [
|
|
8
|
+
"the rest of the drill",
|
|
9
|
+
"the rest of the morning",
|
|
10
|
+
"the rest of the walk",
|
|
11
|
+
"the next hour",
|
|
12
|
+
"everything after that",
|
|
13
|
+
"everything after the bell"
|
|
14
|
+
],
|
|
15
|
+
"fogNoun": ["blur", "haze", "fog"]
|
|
16
|
+
},
|
|
17
|
+
"rejectIf": [
|
|
18
|
+
"sentence describes literal image blur, smoke, fog, haze, or optical conditions",
|
|
19
|
+
"sentence includes a concrete cause"
|
|
20
|
+
],
|
|
21
|
+
"positiveExamples": [
|
|
22
|
+
"The rest of the drill was a blur.",
|
|
23
|
+
"Everything after that was a haze."
|
|
24
|
+
],
|
|
25
|
+
"negativeExamples": [
|
|
26
|
+
"The blur in the photo came from a cracked lens.",
|
|
27
|
+
"The haze over the harbor came from smoke after the warehouse fire."
|
|
28
|
+
],
|
|
29
|
+
"notes": ["This is a summary-fog transition, not a literal visual condition."]
|
|
30
|
+
}
|
|
@@ -3,10 +3,12 @@ import abstractMetaphorClaim from "../patterns/abstract-metaphor-claim.json" wit
|
|
|
3
3
|
import emptyEmotionalWeather from "../patterns/empty-emotional-weather.json" with { type: "json" };
|
|
4
4
|
import emptySceneState from "../patterns/empty-scene-state.json" with { type: "json" };
|
|
5
5
|
import emptySceneTransition from "../patterns/empty-scene-transition.json" with { type: "json" };
|
|
6
|
+
import emotionAsSubstance from "../patterns/emotion-as-substance.json" with { type: "json" };
|
|
6
7
|
import genericLessonExtraction from "../patterns/generic-lesson-extraction.json" with { type: "json" };
|
|
7
8
|
export const semanticThinnessPatternSetA = [
|
|
8
9
|
abstractContrast,
|
|
9
10
|
abstractMetaphorClaim,
|
|
11
|
+
emotionAsSubstance,
|
|
10
12
|
emptyEmotionalWeather,
|
|
11
13
|
emptySceneState,
|
|
12
14
|
emptySceneTransition,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-data-a.js","sourceRoot":"","sources":["../../../../src/rules/semantic-thinness/private/pattern-data-a.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,oCAAoC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxF,OAAO,qBAAqB,MAAM,0CAA0C,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnG,OAAO,qBAAqB,MAAM,0CAA0C,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnG,OAAO,eAAe,MAAM,oCAAoC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACvF,OAAO,oBAAoB,MAAM,yCAAyC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACjG,OAAO,kBAAkB,MAAM,uCAAuC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC7F,OAAO,uBAAuB,MAAM,4CAA4C,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAGvG,MAAM,CAAC,MAAM,2BAA2B,GAAuC;IAC7E,gBAAgB;IAChB,qBAAqB;IACrB,kBAAkB;IAClB,qBAAqB;IACrB,eAAe;IACf,oBAAoB;IACpB,uBAAuB;CACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-data-b.js","sourceRoot":"","sources":["../../../../src/rules/semantic-thinness/private/pattern-data-b.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,MAAM,6CAA6C,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxG,OAAO,kBAAkB,MAAM,sCAAsC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5F,OAAO,kBAAkB,MAAM,sCAAsC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5F,OAAO,8BAA8B,MAAM,oDAAoD,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACtH,OAAO,qBAAqB,MAAM,0CAA0C,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnG,OAAO,oBAAoB,MAAM,yCAAyC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAGjG,MAAM,CAAC,MAAM,2BAA2B,GAAuC;IAC7E,uBAAuB;IACvB,kBAAkB;IAClB,kBAAkB;IAClB,8BAA8B;IAC9B,qBAAqB;IACrB,oBAAoB;CACrB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import abstractPersonificationLine from "../patterns/abstract-personification-line.json" with { type: "json" };
|
|
2
|
+
import bodyEmotionShorthand from "../patterns/body-emotion-shorthand.json" with { type: "json" };
|
|
3
|
+
import emptyAtmosphereShift from "../patterns/empty-atmosphere-shift.json" with { type: "json" };
|
|
4
|
+
import fixedMetaphorFrame from "../patterns/fixed-metaphor-frame.json" with { type: "json" };
|
|
5
|
+
import gazeChoreography from "../patterns/gaze-choreography.json" with { type: "json" };
|
|
6
|
+
import sensoryInsteadOfFrame from "../patterns/sensory-instead-of-frame.json" with { type: "json" };
|
|
7
|
+
import summaryFogTransition from "../patterns/summary-fog-transition.json" with { type: "json" };
|
|
8
|
+
export const semanticThinnessPatternSetC = [
|
|
9
|
+
abstractPersonificationLine,
|
|
10
|
+
bodyEmotionShorthand,
|
|
11
|
+
emptyAtmosphereShift,
|
|
12
|
+
fixedMetaphorFrame,
|
|
13
|
+
gazeChoreography,
|
|
14
|
+
sensoryInsteadOfFrame,
|
|
15
|
+
summaryFogTransition
|
|
16
|
+
];
|
|
17
|
+
//# sourceMappingURL=pattern-data-c.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-data-c.js","sourceRoot":"","sources":["../../../../src/rules/semantic-thinness/private/pattern-data-c.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,MAAM,gDAAgD,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC/G,OAAO,oBAAoB,MAAM,yCAAyC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACjG,OAAO,oBAAoB,MAAM,yCAAyC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACjG,OAAO,kBAAkB,MAAM,uCAAuC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC7F,OAAO,gBAAgB,MAAM,oCAAoC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxF,OAAO,qBAAqB,MAAM,2CAA2C,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpG,OAAO,oBAAoB,MAAM,yCAAyC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAGjG,MAAM,CAAC,MAAM,2BAA2B,GAAuC;IAC7E,2BAA2B;IAC3B,oBAAoB;IACpB,oBAAoB;IACpB,kBAAkB;IAClB,gBAAgB;IAChB,qBAAqB;IACrB,oBAAoB;CACrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-data-d.js","sourceRoot":"","sources":["../../../../src/rules/semantic-thinness/private/pattern-data-d.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,6BAA6B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1E,OAAO,cAAc,MAAM,kCAAkC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpF,OAAO,YAAY,MAAM,iCAAiC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACjF,OAAO,cAAc,MAAM,mCAAmC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACrF,OAAO,cAAc,MAAM,mCAAmC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACrF,OAAO,gBAAgB,MAAM,oCAAoC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxF,OAAO,gBAAgB,MAAM,qCAAqC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAGzF,MAAM,CAAC,MAAM,2BAA2B,GAAuC;IAC7E,SAAS;IACT,cAAc;IACd,YAAY;IACZ,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,gBAAgB;CACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-data.js","sourceRoot":"","sources":["../../../../src/rules/semantic-thinness/private/pattern-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,GAAG,2BAA2B;IAC9B,GAAG,2BAA2B;IAC9B,GAAG,2BAA2B;IAC9B,GAAG,2BAA2B;CAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-matcher.js","sourceRoot":"","sources":["../../../../src/rules/semantic-thinness/private/pattern-matcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { allParagraphSentences } from "../../shared/text/sections.js";
|
|
2
2
|
import { semanticThinnessPatterns } from "./private/pattern-data.js";
|
|
3
|
+
import { emitTextlintFinding } from "../../adapters/textlint/report.js";
|
|
3
4
|
import { compileSemanticThinnessPatterns, findSemanticThinnessMatch } from "./private/pattern-matcher.js";
|
|
4
5
|
const COMPILED_PATTERNS = compileSemanticThinnessPatterns(semanticThinnessPatterns);
|
|
5
6
|
const rule = (context) => {
|
|
6
|
-
const { Syntax
|
|
7
|
+
const { Syntax } = context;
|
|
7
8
|
return {
|
|
8
9
|
[Syntax.Document](node) {
|
|
9
10
|
for (const item of allParagraphSentences(node)) {
|
|
@@ -11,12 +12,15 @@ const rule = (context) => {
|
|
|
11
12
|
if (match === undefined) {
|
|
12
13
|
continue;
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
emitTextlintFinding(context, {
|
|
16
|
+
node: item.paragraph,
|
|
17
|
+
ruleId: "semantic-thinness:semantic-thinness",
|
|
18
|
+
message: `Semantic thinness (${match.patternId}): ${match.purpose} Matched template: ${match.signal}`,
|
|
19
|
+
range: {
|
|
20
|
+
start: item.source.originalStartFor(item.sentence.start),
|
|
21
|
+
end: item.source.originalEndFor(item.sentence.end)
|
|
22
|
+
}
|
|
23
|
+
});
|
|
20
24
|
}
|
|
21
25
|
}
|
|
22
26
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-thinness.js","sourceRoot":"","sources":["../../../src/rules/semantic-thinness/semantic-thinness.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EACL,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,8BAA8B,CAAC;AAEtC,MAAM,iBAAiB,GAAG,+BAA+B,CACvD,wBAAwB,CACzB,CAAC;AAEF,MAAM,IAAI,GAAuB,CAAC,OAAO,EAAE,EAAE;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3B,OAAO;QACL,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAqB;YACrC,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,MAAM,KAAK,GAAG,yBAAyB,CACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAClB,iBAAiB,CAClB,CAAC;gBACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,SAAS;gBACX,CAAC;gBAED,mBAAmB,CAAC,OAAO,EAAE;oBAC3B,IAAI,EAAE,IAAI,CAAC,SAAS;oBACpB,MAAM,EAAE,qCAAqC;oBAC7C,OAAO,EAAE,sBAAsB,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,OAAO,sBAAsB,KAAK,CAAC,MAAM,EAAE;oBACrG,KAAK,EAAE;wBACL,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;wBACxD,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;qBACnD;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|