chaffjs 0.7.0 → 0.9.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.
- package/README.md +11 -4
- package/dist/adapter-load.d.ts +12 -1
- package/dist/adapter-load.d.ts.map +1 -1
- package/dist/adapter-load.js +37 -13
- package/dist/adapter-load.js.map +1 -1
- package/dist/address-chain.d.ts +9 -0
- package/dist/address-chain.d.ts.map +1 -0
- package/dist/address-chain.js +105 -0
- package/dist/address-chain.js.map +1 -0
- package/dist/cli-args.d.ts +8 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +8 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-text.d.ts +26 -0
- package/dist/cli-text.d.ts.map +1 -0
- package/dist/cli-text.js +155 -0
- package/dist/cli-text.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +94 -87
- package/dist/cli.js.map +1 -1
- package/dist/commands/cite.d.ts +2 -1
- package/dist/commands/cite.d.ts.map +1 -1
- package/dist/commands/cite.js +39 -18
- package/dist/commands/cite.js.map +1 -1
- package/dist/commands/eval.d.ts.map +1 -1
- package/dist/commands/eval.js +2 -1
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/feedback.d.ts +35 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +157 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/skill.d.ts +22 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +68 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +3 -2
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/tree.d.ts +11 -1
- package/dist/commands/tree.d.ts.map +1 -1
- package/dist/commands/tree.js +21 -7
- package/dist/commands/tree.js.map +1 -1
- package/dist/config/by-path.d.ts +5 -1
- package/dist/config/by-path.d.ts.map +1 -1
- package/dist/config/by-path.js +1 -4
- package/dist/config/by-path.js.map +1 -1
- package/dist/config/load.d.ts +2 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +3 -1
- package/dist/config/load.js.map +1 -1
- package/dist/config/rule-problems.d.ts +2 -1
- package/dist/config/rule-problems.d.ts.map +1 -1
- package/dist/config/rule-problems.js +17 -6
- package/dist/config/rule-problems.js.map +1 -1
- package/dist/config/write.d.ts.map +1 -1
- package/dist/config/write.js +29 -9
- package/dist/config/write.js.map +1 -1
- package/dist/detectors/char-shape.d.ts.map +1 -1
- package/dist/detectors/char-shape.js +3 -2
- package/dist/detectors/char-shape.js.map +1 -1
- package/dist/document.d.ts +2 -2
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +4 -2
- package/dist/document.js.map +1 -1
- package/dist/feedback/draft.d.ts +28 -0
- package/dist/feedback/draft.d.ts.map +1 -0
- package/dist/feedback/draft.js +66 -0
- package/dist/feedback/draft.js.map +1 -0
- package/dist/feedback/excerpt.d.ts +10 -0
- package/dist/feedback/excerpt.d.ts.map +1 -0
- package/dist/feedback/excerpt.js +20 -0
- package/dist/feedback/excerpt.js.map +1 -0
- package/dist/genre.d.ts +1 -1
- package/dist/genre.d.ts.map +1 -1
- package/dist/genre.js +3 -3
- package/dist/genre.js.map +1 -1
- package/dist/init.d.ts +2 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +62 -13
- package/dist/init.js.map +1 -1
- package/dist/legal-address.d.ts +2 -0
- package/dist/legal-address.d.ts.map +1 -0
- package/dist/legal-address.js +16 -0
- package/dist/legal-address.js.map +1 -0
- package/dist/orthography.d.ts.map +1 -1
- package/dist/orthography.js +15 -0
- package/dist/orthography.js.map +1 -1
- package/dist/plugin.d.ts +94 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/profile/for-file.d.ts +7 -0
- package/dist/profile/for-file.d.ts.map +1 -0
- package/dist/profile/for-file.js +6 -0
- package/dist/profile/for-file.js.map +1 -0
- package/dist/profile/load.d.ts +4 -0
- package/dist/profile/load.d.ts.map +1 -0
- package/dist/profile/load.js +25 -0
- package/dist/profile/load.js.map +1 -0
- package/dist/profile/parse.d.ts +19 -0
- package/dist/profile/parse.d.ts.map +1 -0
- package/dist/profile/parse.js +82 -0
- package/dist/profile/parse.js.map +1 -0
- package/dist/profile/select.d.ts +22 -0
- package/dist/profile/select.d.ts.map +1 -0
- package/dist/profile/select.js +21 -0
- package/dist/profile/select.js.map +1 -0
- package/dist/reasons.d.ts +16 -0
- package/dist/reasons.d.ts.map +1 -0
- package/dist/reasons.js +31 -0
- package/dist/reasons.js.map +1 -0
- package/dist/render/explain.d.ts.map +1 -1
- package/dist/render/explain.js +36 -12
- package/dist/render/explain.js.map +1 -1
- package/dist/render/friendly.d.ts.map +1 -1
- package/dist/render/friendly.js +32 -9
- package/dist/render/friendly.js.map +1 -1
- package/dist/render/rules-json.d.ts.map +1 -1
- package/dist/render/rules-json.js +47 -27
- package/dist/render/rules-json.js.map +1 -1
- package/dist/render/summary.d.ts +3 -2
- package/dist/render/summary.d.ts.map +1 -1
- package/dist/render/summary.js +24 -9
- package/dist/render/summary.js.map +1 -1
- package/dist/render/suppressions.d.ts +2 -1
- package/dist/render/suppressions.d.ts.map +1 -1
- package/dist/render/suppressions.js +34 -10
- package/dist/render/suppressions.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +41 -12
- package/dist/run.js.map +1 -1
- package/dist/structure/build.d.ts +2 -1
- package/dist/structure/build.d.ts.map +1 -1
- package/dist/structure/build.js +102 -9
- package/dist/structure/build.js.map +1 -1
- package/dist/structure/cite.d.ts.map +1 -1
- package/dist/structure/cite.js +3 -1
- package/dist/structure/cite.js.map +1 -1
- package/dist/structure/issues.d.ts +5 -2
- package/dist/structure/issues.d.ts.map +1 -1
- package/dist/structure/issues.js +35 -10
- package/dist/structure/issues.js.map +1 -1
- package/dist/structure/numbering.d.ts.map +1 -1
- package/dist/structure/numbering.js +11 -6
- package/dist/structure/numbering.js.map +1 -1
- package/dist/structure/of.d.ts +2 -1
- package/dist/structure/of.d.ts.map +1 -1
- package/dist/structure/of.js +7 -1
- package/dist/structure/of.js.map +1 -1
- package/dist/structure/relative-find.d.ts +6 -0
- package/dist/structure/relative-find.d.ts.map +1 -0
- package/dist/structure/relative-find.js +179 -0
- package/dist/structure/relative-find.js.map +1 -0
- package/dist/structure/relative-resolve.d.ts +3 -0
- package/dist/structure/relative-resolve.d.ts.map +1 -0
- package/dist/structure/relative-resolve.js +175 -0
- package/dist/structure/relative-resolve.js.map +1 -0
- package/dist/structure/unread.d.ts +8 -0
- package/dist/structure/unread.d.ts.map +1 -0
- package/dist/structure/unread.js +34 -0
- package/dist/structure/unread.js.map +1 -0
- package/dist/ui.d.ts +14 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +14 -0
- package/dist/ui.js.map +1 -0
- package/dist/watch.d.ts +1 -1
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +2 -2
- package/dist/watch.js.map +1 -1
- package/package.json +5 -3
- package/profiles/statute.yaml +62 -0
- package/skills/chaff/SKILL.md +81 -0
- package/src/adapter-load.ts +41 -10
- package/src/address-chain.ts +113 -0
- package/src/cli-args.ts +9 -0
- package/src/cli-text.ts +186 -0
- package/src/cli.ts +111 -90
- package/src/commands/cite.ts +51 -18
- package/src/commands/eval.ts +2 -1
- package/src/commands/feedback.ts +210 -0
- package/src/commands/skill.ts +74 -0
- package/src/commands/test.ts +3 -2
- package/src/commands/tree.ts +30 -8
- package/src/config/by-path.ts +11 -3
- package/src/config/load.ts +5 -1
- package/src/config/rule-problems.ts +24 -5
- package/src/config/write.ts +33 -9
- package/src/detectors/char-shape.ts +5 -4
- package/src/document.ts +11 -3
- package/src/feedback/draft.ts +102 -0
- package/src/feedback/excerpt.ts +23 -0
- package/src/genre.ts +4 -4
- package/src/init.ts +74 -15
- package/src/orthography.ts +15 -0
- package/src/plugin.ts +88 -0
- package/src/profile/for-file.ts +11 -0
- package/src/profile/load.ts +26 -0
- package/src/profile/parse.ts +106 -0
- package/src/profile/select.ts +35 -0
- package/src/reasons.ts +49 -0
- package/src/render/explain.ts +46 -12
- package/src/render/friendly.ts +42 -10
- package/src/render/rules-json.ts +35 -9
- package/src/render/summary.ts +34 -9
- package/src/render/suppressions.ts +45 -10
- package/src/run.ts +44 -11
- package/src/structure/build.ts +128 -12
- package/src/structure/cite.ts +3 -1
- package/src/structure/issues.ts +42 -15
- package/src/structure/numbering.ts +12 -7
- package/src/structure/of.ts +15 -3
- package/src/structure/relative-find.ts +224 -0
- package/src/structure/relative-resolve.ts +209 -0
- package/src/structure/unread.ts +39 -0
- package/src/ui.ts +23 -0
- package/src/watch.ts +2 -2
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { detected } from "./parse.js";
|
|
2
|
+
/** 設定で書いた「使わない」。内容から選ぶのも止める。 */
|
|
3
|
+
export const NO_PROFILE = "none";
|
|
4
|
+
const named = (definitions, id, language) => definitions.find((definition) => definition.id === id)?.languages[language];
|
|
5
|
+
/**
|
|
6
|
+
* 強いものから: by_path、chaff.yaml の profile、内容。どれかが none と書けばそこで止め、内容からも選ばない。
|
|
7
|
+
* 名前で選んだ種類にその言語の中身が無ければ選ばない。黙って別の種類にしない。
|
|
8
|
+
*/
|
|
9
|
+
export const chooseProfile = (definitions, request) => {
|
|
10
|
+
const written = request.byPath ?? request.config;
|
|
11
|
+
if (written === NO_PROFILE)
|
|
12
|
+
return undefined;
|
|
13
|
+
if (written !== undefined) {
|
|
14
|
+
const profile = named(definitions, written, request.language);
|
|
15
|
+
return profile === undefined ? undefined : { profile, from: request.byPath === undefined ? "config" : "by-path" };
|
|
16
|
+
}
|
|
17
|
+
const found = definitions.find((definition) => detected(definition, request.source, request.language));
|
|
18
|
+
const profile = found?.languages[request.language];
|
|
19
|
+
return profile === undefined ? undefined : { profile, from: "content" };
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/profile/select.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA0B,MAAM,YAAY,CAAC;AAE9D,gCAAgC;AAChC,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AAajC,MAAM,KAAK,GAAG,CAAC,WAAyC,EAAE,EAAU,EAAE,QAAgB,EAA+B,EAAE,CACrH,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAAyC,EAAE,OAAuB,EAA6B,EAAE;IAC7H,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IACjD,IAAI,OAAO,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9D,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACpH,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvG,MAAM,OAAO,GAAG,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnD,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC1E,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Texts } from "./ui.ts";
|
|
2
|
+
/** Why a rule did not run, in the document's language. Listed under the findings so "0 findings" is never a silent pass. */
|
|
3
|
+
export type Reasons = {
|
|
4
|
+
readonly otherLanguage: (language: string) => string;
|
|
5
|
+
readonly noCapability: (capability: string) => string;
|
|
6
|
+
readonly noTags: string;
|
|
7
|
+
readonly semantic: string;
|
|
8
|
+
readonly experimental: string;
|
|
9
|
+
readonly turnedOff: string;
|
|
10
|
+
readonly noStructure: (language: string) => string;
|
|
11
|
+
readonly unreadStructure: (clauses: number, units: number) => string;
|
|
12
|
+
readonly noDetector: (name: string) => string;
|
|
13
|
+
readonly noLexicon: (language: string, list: string) => string;
|
|
14
|
+
};
|
|
15
|
+
export declare const REASONS: Texts<Reasons>;
|
|
16
|
+
//# sourceMappingURL=reasons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasons.d.ts","sourceRoot":"","sources":["../src/reasons.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,4HAA4H;AAC5H,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACrD,QAAQ,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACnD,QAAQ,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACrE,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAChE,CAAC;AAOF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,OAAO,CA2BlC,CAAC"}
|
package/dist/reasons.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const CAPABILITY_NAME = {
|
|
2
|
+
ja: { pos: "品詞解析", lemma: "原形" },
|
|
3
|
+
en: { pos: "part-of-speech tagging", lemma: "lemmas" },
|
|
4
|
+
};
|
|
5
|
+
export const REASONS = {
|
|
6
|
+
ja: {
|
|
7
|
+
otherLanguage: (language) => `${language} 向けの rule ではないため`,
|
|
8
|
+
noCapability: (capability) => `この言語では${CAPABILITY_NAME.ja[capability] ?? capability}が使えないため`,
|
|
9
|
+
noTags: "アダプタが品詞を返さなかったため",
|
|
10
|
+
semantic: "意味を読む検査のため(npx chaff test で動きます)",
|
|
11
|
+
experimental: "まだ試験中のため",
|
|
12
|
+
turnedOff: "設定で止めているため",
|
|
13
|
+
noStructure: (language) => `${language} のパッケージは文書の構造を読めないため`,
|
|
14
|
+
unreadStructure: (clauses, units) => `条項の番号が本文に ${String(clauses)} 個あるのに、番号として読めたのは ${String(units)} 個のため(深い字下げや、行が本文につながった文書)`,
|
|
15
|
+
noDetector: (name) => `検出器 ${name} がないため`,
|
|
16
|
+
noLexicon: (language, list) => `${language} の語彙表 ${list} が無いため`,
|
|
17
|
+
},
|
|
18
|
+
en: {
|
|
19
|
+
otherLanguage: (language) => `not a rule for ${language}`,
|
|
20
|
+
noCapability: (capability) => `${CAPABILITY_NAME.en[capability] ?? capability} is not available for this language`,
|
|
21
|
+
noTags: "the language package returned no parts of speech",
|
|
22
|
+
semantic: "it reads meaning; npx chaff test runs it",
|
|
23
|
+
experimental: "still experimental",
|
|
24
|
+
turnedOff: "turned off in the settings",
|
|
25
|
+
noStructure: (language) => `the ${language} package cannot read a document's structure`,
|
|
26
|
+
unreadStructure: (clauses, units) => `the text has ${String(clauses)} clause numbers but only ${String(units)} were read as numbered lines (deep indents, or lines run into the text)`,
|
|
27
|
+
noDetector: (name) => `no detector named ${name}`,
|
|
28
|
+
noLexicon: (language, list) => `the ${language} package has no word list ${list}`,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=reasons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasons.js","sourceRoot":"","sources":["../src/reasons.ts"],"names":[],"mappings":"AAgBA,MAAM,eAAe,GAA4C;IAC/D,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IAChC,EAAE,EAAE,EAAE,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAmB;IACrC,EAAE,EAAE;QACF,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,QAAQ,kBAAkB;QAC1D,YAAY,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,UAAU,SAAS;QAC5F,MAAM,EAAE,kBAAkB;QAC1B,QAAQ,EAAE,kCAAkC;QAC5C,YAAY,EAAE,UAAU;QACxB,SAAS,EAAE,YAAY;QACvB,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,QAAQ,sBAAsB;QAC5D,eAAe,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAClC,aAAa,MAAM,CAAC,OAAO,CAAC,qBAAqB,MAAM,CAAC,KAAK,CAAC,4BAA4B;QAC5F,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,QAAQ;QACzC,SAAS,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,QAAQ,SAAS,IAAI,QAAQ;KAChE;IACD,EAAE,EAAE;QACF,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,QAAQ,EAAE;QACzD,YAAY,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,UAAU,qCAAqC;QAClH,MAAM,EAAE,kDAAkD;QAC1D,QAAQ,EAAE,0CAA0C;QACpD,YAAY,EAAE,oBAAoB;QAClC,SAAS,EAAE,4BAA4B;QACvC,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,QAAQ,6CAA6C;QACvF,eAAe,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAClC,gBAAgB,MAAM,CAAC,OAAO,CAAC,4BAA4B,MAAM,CAAC,KAAK,CAAC,yEAAyE;QACnJ,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,IAAI,EAAE;QACjD,SAAS,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,QAAQ,6BAA6B,IAAI,EAAE;KAClF;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/render/explain.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/render/explain.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA+C1D,qCAAqC;AACrC,eAAO,MAAM,aAAa,GAAI,MAAM,cAAc,EAAE,SAAS,KAAK,EAAE,UAAU,MAAM,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,MAqBpH,CAAC"}
|
package/dist/render/explain.js
CHANGED
|
@@ -1,36 +1,60 @@
|
|
|
1
1
|
import { definedLevels, resolve } from "../levels.js";
|
|
2
2
|
import { localized } from "./text.js";
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import { uiLanguageOf } from "../ui.js";
|
|
4
|
+
const TEXT = {
|
|
5
|
+
ja: {
|
|
6
|
+
off: "見ない",
|
|
7
|
+
defaultGenre: "既定",
|
|
8
|
+
genreNote: (genre, others) => `この数字は ${genre} のものです。ほかに ${others} で別の数字を持っています。`,
|
|
9
|
+
experimental: "このルールはまだ試験中で、既定では動きません(--experimental で動きます)。",
|
|
10
|
+
howToFix: "直しかた",
|
|
11
|
+
values: (unit) => `設定できる値(単位: ${unit}):`,
|
|
12
|
+
now: (level) => `いまは ${level} です。`,
|
|
13
|
+
change: (id) => `変える: npx chaff relax ${id} --why "理由"`,
|
|
14
|
+
},
|
|
15
|
+
en: {
|
|
16
|
+
off: "not checked",
|
|
17
|
+
defaultGenre: "the default genre",
|
|
18
|
+
genreNote: (genre, others) => `These numbers are for ${genre}. ${others} have numbers of their own.`,
|
|
19
|
+
experimental: "This rule is still experimental and does not run by default (--experimental runs it).",
|
|
20
|
+
howToFix: "How to fix",
|
|
21
|
+
values: (unit) => `Levels (unit: ${unit}):`,
|
|
22
|
+
now: (level) => `Now: ${level}.`,
|
|
23
|
+
change: (id) => `Change it: npx chaff relax ${id} --why "reason"`,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
const levelLine = (rule, level, current, genre, off) => {
|
|
27
|
+
const mark = level === current ? "→" : " ";
|
|
5
28
|
const name = level.padEnd(9);
|
|
6
|
-
return level === "off" ? ` ${mark} ${name}
|
|
29
|
+
return level === "off" ? ` ${mark} ${name}${off}` : ` ${mark} ${name}${resolve(rule, level, genre).limit}`;
|
|
7
30
|
};
|
|
8
31
|
/** ジャンルで数字が変わる rule は、それを言わないと「設定したのに効かない」に見える。 */
|
|
9
|
-
const genreNote = (rule, genre) => {
|
|
32
|
+
const genreNote = (rule, genre, text) => {
|
|
10
33
|
const others = Object.keys(rule.by_genre).filter((key) => key !== genre);
|
|
11
34
|
if (others.length === 0)
|
|
12
35
|
return [];
|
|
13
|
-
return ["", `
|
|
36
|
+
return ["", ` ${text.genreNote(genre ?? text.defaultGenre, others.join(" / "))}`];
|
|
14
37
|
};
|
|
15
38
|
/** rule の意図と根拠を読む。指摘に納得できないときの入口。 */
|
|
16
39
|
export const renderExplain = (rule, current, language, unit, genre) => {
|
|
17
|
-
const
|
|
40
|
+
const text = TEXT[uiLanguageOf(language)];
|
|
41
|
+
const experimental = rule.status === "experimental" ? [` ${text.experimental}`] : [];
|
|
18
42
|
return [
|
|
19
43
|
"",
|
|
20
44
|
` ${localized(rule.name, language)} (${rule.id})`,
|
|
21
45
|
"",
|
|
22
46
|
` ${localized(rule.why, language)}`,
|
|
23
47
|
"",
|
|
24
|
-
`
|
|
48
|
+
` ${text.howToFix}: ${localized(rule.how_to_fix, language)}`,
|
|
25
49
|
"",
|
|
26
|
-
`
|
|
27
|
-
...definedLevels(rule).map((level) => levelLine(rule, level, current, genre)),
|
|
28
|
-
...genreNote(rule, genre),
|
|
50
|
+
` ${text.values(unit)}`,
|
|
51
|
+
...definedLevels(rule).map((level) => levelLine(rule, level, current, genre, text.off)),
|
|
52
|
+
...genreNote(rule, genre, text),
|
|
29
53
|
"",
|
|
30
|
-
`
|
|
54
|
+
` ${text.now(current)}`,
|
|
31
55
|
...experimental,
|
|
32
56
|
"",
|
|
33
|
-
`
|
|
57
|
+
` ${text.change(rule.id)}`,
|
|
34
58
|
"",
|
|
35
59
|
].join("\n");
|
|
36
60
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/render/explain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/render/explain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"friendly.d.ts","sourceRoot":"","sources":["../../src/render/friendly.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"friendly.d.ts","sourceRoot":"","sources":["../../src/render/friendly.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAsE3C,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,QAAQ,SAAS,EAAE,OAAO,SAAS,cAAc,EAAE,EAAE,UAAU,MAAM,KAAG,MAsBtH,CAAC"}
|
package/dist/render/friendly.js
CHANGED
|
@@ -1,6 +1,29 @@
|
|
|
1
1
|
import { MARK, localized, messageOf } from "./text.js";
|
|
2
2
|
import { tally } from "./summary.js";
|
|
3
|
+
import { uiLanguageOf } from "../ui.js";
|
|
3
4
|
const RULE = 60;
|
|
5
|
+
const TEXT = {
|
|
6
|
+
ja: {
|
|
7
|
+
line: (n) => `${n} 行目`,
|
|
8
|
+
relax: "このルールをゆるめる",
|
|
9
|
+
machine: "すべて機械による判定です",
|
|
10
|
+
deterministic: " (同じ文章なら何度実行しても同じ結果になります)",
|
|
11
|
+
untouched: "文章は書き換えていません。直すのは書いた人です。",
|
|
12
|
+
forced: (n, ids) => `試験中の rule を ${n} 件、設定により有効にしています: ${ids}`,
|
|
13
|
+
notRun: (n) => `${n} 件の rule は動いていません:`,
|
|
14
|
+
because: (why) => `(${why})`,
|
|
15
|
+
},
|
|
16
|
+
en: {
|
|
17
|
+
line: (n) => `line ${n}`,
|
|
18
|
+
relax: "Relax this rule",
|
|
19
|
+
machine: "All judged by machine",
|
|
20
|
+
deterministic: " (the same text gives the same result every time)",
|
|
21
|
+
untouched: "The text was not changed. Fixing it is the writer's job.",
|
|
22
|
+
forced: (n, ids) => `${n} experimental rule${n === 1 ? "" : "s"} turned on in the settings: ${ids}`,
|
|
23
|
+
notRun: (n) => `${n} rule${n === 1 ? "" : "s"} did not run:`,
|
|
24
|
+
because: (why) => ` (${why})`,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
4
27
|
const QUOTE_LIMIT = 120;
|
|
5
28
|
const indent = (text, pad) => text.split("\n").map((line) => `${pad}${line}`);
|
|
6
29
|
const quoteOf = (finding) => {
|
|
@@ -16,7 +39,8 @@ const quoteOf = (finding) => {
|
|
|
16
39
|
*/
|
|
17
40
|
const block = (finding, rule, language) => [
|
|
18
41
|
"",
|
|
19
|
-
|
|
42
|
+
// "12 行目" and "line 12" take the same width on a terminal, so the rule ends in the same column in both.
|
|
43
|
+
`─── ${TEXT[uiLanguageOf(language)].line(finding.line)} ${"─".repeat(Math.max(0, RULE - String(finding.line).length - 8))}`,
|
|
20
44
|
...quoteOf(finding),
|
|
21
45
|
"",
|
|
22
46
|
` ${MARK[finding.severity] ?? "·"} ${localized(rule.name, language)}`,
|
|
@@ -26,7 +50,7 @@ const block = (finding, rule, language) => [
|
|
|
26
50
|
"",
|
|
27
51
|
...indent(`→ ${localized(rule.how_to_fix, language)}`, " "),
|
|
28
52
|
"",
|
|
29
|
-
`
|
|
53
|
+
` ${TEXT[uiLanguageOf(language)].relax}: npx chaff relax ${finding.rule}`,
|
|
30
54
|
"",
|
|
31
55
|
];
|
|
32
56
|
export const renderFriendly = (header, result, rules, language) => {
|
|
@@ -35,20 +59,19 @@ export const renderFriendly = (header, result, rules, language) => {
|
|
|
35
59
|
const rule = byId.get(finding.rule);
|
|
36
60
|
return rule === undefined ? [] : block(finding, rule, language);
|
|
37
61
|
});
|
|
62
|
+
const text = TEXT[uiLanguageOf(language)];
|
|
38
63
|
const notes = [
|
|
39
64
|
"",
|
|
40
65
|
"─".repeat(RULE),
|
|
41
66
|
"",
|
|
42
|
-
` ${tally(result.findings)}
|
|
43
|
-
|
|
67
|
+
` ${tally(result.findings, uiLanguageOf(language))} ${text.machine}`,
|
|
68
|
+
text.deterministic,
|
|
44
69
|
"",
|
|
45
|
-
|
|
70
|
+
` ${text.untouched}`,
|
|
46
71
|
];
|
|
47
|
-
const forced = result.forcedExperimental.length > 0
|
|
48
|
-
? ["", ` 試験中の rule を ${result.forcedExperimental.length} 件、設定により有効にしています: ${result.forcedExperimental.join(", ")}`]
|
|
49
|
-
: [];
|
|
72
|
+
const forced = result.forcedExperimental.length > 0 ? ["", ` ${text.forced(result.forcedExperimental.length, result.forcedExperimental.join(", "))}`] : [];
|
|
50
73
|
const skipped = result.skipped.length > 0
|
|
51
|
-
? ["", ` ${result.skipped.length}
|
|
74
|
+
? ["", ` ${text.notRun(result.skipped.length)}`, ...result.skipped.map((entry) => ` ${entry.rule}${text.because(entry.why)}`)]
|
|
52
75
|
: [];
|
|
53
76
|
return ["", header, ...blocks, ...notes, ...forced, ...skipped, ""].join("\n");
|
|
54
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"friendly.js","sourceRoot":"","sources":["../../src/render/friendly.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"friendly.js","sourceRoot":"","sources":["../../src/render/friendly.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules-json.d.ts","sourceRoot":"","sources":["../../src/render/rules-json.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"rules-json.d.ts","sourceRoot":"","sources":["../../src/render/rules-json.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAwDnD,0DAA0D;AAC1D,eAAO,MAAM,SAAS,GAAI,OAAO,SAAS,cAAc,EAAE,EAAE,QAAQ,MAAM,EAAE,UAAU,MAAM,EAAE,OAAO,MAAM,KAAG,MA8B7G,CAAC"}
|
|
@@ -1,15 +1,32 @@
|
|
|
1
1
|
import { definedLevels, resolve } from "../levels.js";
|
|
2
|
-
|
|
2
|
+
import { uiLanguageOf } from "../ui.js";
|
|
3
|
+
const TEXT = {
|
|
4
|
+
ja: {
|
|
5
|
+
offBySetting: "設定で止めている",
|
|
6
|
+
offExperimental: "experimental な rule は既定で動かさない",
|
|
7
|
+
valuesNote: "この 4 語のかわりに数字を直接書いてもよい。4 語のほうを勧める。",
|
|
8
|
+
reason: "<理由>",
|
|
9
|
+
byFile: "chaff.yaml の rules に <rule-id>: <level> を足す。既定のままのものは書かない。",
|
|
10
|
+
},
|
|
11
|
+
en: {
|
|
12
|
+
offBySetting: "turned off in the settings",
|
|
13
|
+
offExperimental: "experimental rules do not run by default",
|
|
14
|
+
valuesNote: "A number may be written instead of these four words. The words are recommended.",
|
|
15
|
+
reason: "<reason>",
|
|
16
|
+
byFile: "Add <rule-id>: <level> under rules in chaff.yaml. Leave out anything at its default.",
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
const now = (rule, config, genre, text) => {
|
|
3
20
|
const explicit = config.rules[rule.id];
|
|
4
21
|
if (explicit === "off")
|
|
5
|
-
return { level: "off", why_off:
|
|
22
|
+
return { level: "off", why_off: text.offBySetting };
|
|
6
23
|
const limit = rule.layer === "L4" ? undefined : config.limits[rule.id];
|
|
7
24
|
if (limit !== undefined)
|
|
8
25
|
return { level: "normal", limit, set_as: "number" };
|
|
9
26
|
if (explicit !== undefined)
|
|
10
27
|
return { level: explicit, limit: resolve(rule, explicit, genre).limit };
|
|
11
28
|
if (rule.status === "experimental" && !config.experimental) {
|
|
12
|
-
return { level: "off", why_off:
|
|
29
|
+
return { level: "off", why_off: text.offExperimental, turn_on_with: `npx chaff lint --experimental` };
|
|
13
30
|
}
|
|
14
31
|
return { level: "normal", limit: resolve(rule, "normal", genre).limit };
|
|
15
32
|
};
|
|
@@ -29,28 +46,31 @@ const levelsOf = (rule, genre) => {
|
|
|
29
46
|
return overridden ? { levels: effective, levels_default: rule.levels, levels_from: "by_genre" } : { levels: rule.levels };
|
|
30
47
|
};
|
|
31
48
|
/** AI に設定を書かせるときの入口。推測せずに書けるだけの情報を 1 つに入れる。spec §19.3。 */
|
|
32
|
-
export const rulesJson = (rules, config, language, genre) =>
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
export const rulesJson = (rules, config, language, genre) => {
|
|
50
|
+
const text = TEXT[uiLanguageOf(language)];
|
|
51
|
+
return JSON.stringify({
|
|
52
|
+
schema_version: 1,
|
|
53
|
+
config_file: "chaff.yaml",
|
|
54
|
+
detected: { genre, language },
|
|
55
|
+
values_you_can_use: ["strict", "normal", "relaxed", "off"],
|
|
56
|
+
values_note: text.valuesNote,
|
|
57
|
+
rules: rules.map((rule) => ({
|
|
58
|
+
id: rule.id,
|
|
59
|
+
layer: rule.layer,
|
|
60
|
+
status: rule.status,
|
|
61
|
+
name: rule.name,
|
|
62
|
+
why: rule.why,
|
|
63
|
+
how_to_fix: rule.how_to_fix,
|
|
64
|
+
use_for: rule.use_for,
|
|
65
|
+
...levelsOf(rule, genre),
|
|
66
|
+
levels_you_can_set: definedLevels(rule),
|
|
67
|
+
your_setting: yourSetting(rule, config),
|
|
68
|
+
now: now(rule, config, genre, text),
|
|
69
|
+
})),
|
|
70
|
+
how_to_change: {
|
|
71
|
+
by_command: ["relax", "strict", "off"].map((command) => `npx chaff ${command} <rule-id> --why "${text.reason}"`),
|
|
72
|
+
by_file: text.byFile,
|
|
73
|
+
},
|
|
74
|
+
}, null, 2);
|
|
75
|
+
};
|
|
56
76
|
//# sourceMappingURL=rules-json.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules-json.js","sourceRoot":"","sources":["../../src/render/rules-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"rules-json.js","sourceRoot":"","sources":["../../src/render/rules-json.ts"],"names":[],"mappings":"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"}
|
package/dist/render/summary.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { Finding } from "../plugin.ts";
|
|
2
|
+
import type { UiLanguage } from "../ui.ts";
|
|
2
3
|
export type FileOutcome = {
|
|
3
4
|
readonly path: string;
|
|
4
5
|
readonly findings: readonly Finding[];
|
|
5
6
|
readonly notRun: number;
|
|
6
7
|
};
|
|
7
|
-
export declare const tally: (findings: readonly Finding[]) => string;
|
|
8
|
+
export declare const tally: (findings: readonly Finding[], ui: UiLanguage) => string;
|
|
8
9
|
/** 複数ファイルを見たときの締め。1 ファイルのときは出さない。 */
|
|
9
|
-
export declare const renderSummary: (outcomes: readonly FileOutcome[]) => string[];
|
|
10
|
+
export declare const renderSummary: (outcomes: readonly FileOutcome[], ui: UiLanguage) => string[];
|
|
10
11
|
//# sourceMappingURL=summary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/render/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/render/summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,UAAU,CAAC;AAElD,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAgCpH,eAAO,MAAM,KAAK,GAAI,UAAU,SAAS,OAAO,EAAE,EAAE,IAAI,UAAU,KAAG,MAGpE,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,aAAa,GAAI,UAAU,SAAS,WAAW,EAAE,EAAE,IAAI,UAAU,KAAG,MAAM,EAKtF,CAAC"}
|
package/dist/render/summary.js
CHANGED
|
@@ -1,18 +1,33 @@
|
|
|
1
1
|
const count = (findings, severity) => findings.filter((finding) => finding.severity === severity).length;
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
const TEXT = {
|
|
3
|
+
ja: {
|
|
4
|
+
counts: { error: (n) => `エラー ${n} 件`, warning: (n) => `注意 ${n} 件`, info: (n) => `参考 ${n} 件` },
|
|
5
|
+
join: "、",
|
|
6
|
+
none: "指摘はありません",
|
|
7
|
+
files: (seen, touched) => `${seen} ファイルを見て、${touched} ファイルに指摘がありました`,
|
|
8
|
+
},
|
|
9
|
+
en: {
|
|
10
|
+
counts: {
|
|
11
|
+
error: (n) => `${n} error${n === 1 ? "" : "s"}`,
|
|
12
|
+
warning: (n) => `${n} warning${n === 1 ? "" : "s"}`,
|
|
13
|
+
info: (n) => `${n} note${n === 1 ? "" : "s"}`,
|
|
14
|
+
},
|
|
15
|
+
join: ", ",
|
|
16
|
+
none: "No findings",
|
|
17
|
+
files: (seen, touched) => `${seen} files checked, ${touched} with findings`,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
const SEVERITIES = ["error", "warning", "info"];
|
|
21
|
+
export const tally = (findings, ui) => {
|
|
22
|
+
const parts = SEVERITIES.filter((severity) => count(findings, severity) > 0).map((severity) => TEXT[ui].counts[severity](count(findings, severity)));
|
|
23
|
+
return parts.length === 0 ? TEXT[ui].none : parts.join(TEXT[ui].join);
|
|
9
24
|
};
|
|
10
25
|
/** 複数ファイルを見たときの締め。1 ファイルのときは出さない。 */
|
|
11
|
-
export const renderSummary = (outcomes) => {
|
|
26
|
+
export const renderSummary = (outcomes, ui) => {
|
|
12
27
|
if (outcomes.length < 2)
|
|
13
28
|
return [];
|
|
14
29
|
const all = outcomes.flatMap((outcome) => outcome.findings);
|
|
15
30
|
const touched = outcomes.filter((outcome) => outcome.findings.length > 0).length;
|
|
16
|
-
return ["", "═".repeat(60), "", ` ${outcomes.length
|
|
31
|
+
return ["", "═".repeat(60), "", ` ${TEXT[ui].files(outcomes.length, touched)}`, ` ${tally(all, ui)}`, ""];
|
|
17
32
|
};
|
|
18
33
|
//# sourceMappingURL=summary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/render/summary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/render/summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Suppressed, Suppression } from "../stet.ts";
|
|
2
|
+
import type { UiLanguage } from "../ui.ts";
|
|
2
3
|
export type PerFile = {
|
|
3
4
|
readonly path: string;
|
|
4
5
|
readonly suppressed: readonly Suppressed[];
|
|
@@ -9,5 +10,5 @@ export type PerFile = {
|
|
|
9
10
|
* 同じ rule を何度も黙らせているなら、それは (b) ではなく (c) のサイン。
|
|
10
11
|
* workflow spec §7.3。
|
|
11
12
|
*/
|
|
12
|
-
export declare const renderSuppressions: (files: readonly PerFile[]) => string;
|
|
13
|
+
export declare const renderSuppressions: (files: readonly PerFile[], ui?: UiLanguage) => string;
|
|
13
14
|
//# sourceMappingURL=suppressions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../src/render/suppressions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../src/render/suppressions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,UAAU,CAAC;AAkClD,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,UAAU,EAAE,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,WAAW,EAAE,CAAA;CAAE,CAAC;AAsCzI;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,SAAS,OAAO,EAAE,EAAE,KAAI,UAAiB,KAAG,MAarF,CAAC"}
|
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
const TEXT = {
|
|
2
|
+
ja: {
|
|
3
|
+
nudge: " ← 設定の見直しを検討してください",
|
|
4
|
+
more: (n) => ` ほか ${n} ファイル`,
|
|
5
|
+
count: (n) => `${String(n).padStart(3)} 件`,
|
|
6
|
+
reasons: (list) => `理由: ${list}`,
|
|
7
|
+
relaxAll: (rule) => `ルールごとゆるめる: npx chaff relax ${rule} --why "..."`,
|
|
8
|
+
none: "\n 抑制されている指摘はありません。\n",
|
|
9
|
+
total: (n) => `抑制されている指摘: ${n} 件`,
|
|
10
|
+
reasonless: (n) => `理由が書かれていない抑制: ${n} 件`,
|
|
11
|
+
},
|
|
12
|
+
en: {
|
|
13
|
+
nudge: " <- consider changing the setting instead",
|
|
14
|
+
more: (n) => ` and ${n} more file${n === 1 ? "" : "s"}`,
|
|
15
|
+
count: (n) => `${String(n).padStart(3)}`,
|
|
16
|
+
reasons: (list) => `reasons: ${list}`,
|
|
17
|
+
relaxAll: (rule) => `relax the whole rule: npx chaff relax ${rule} --why "..."`,
|
|
18
|
+
none: "\n No findings are silenced.\n",
|
|
19
|
+
total: (n) => `Silenced findings: ${n}`,
|
|
20
|
+
reasonless: (n) => `Silenced without a reason: ${n}`,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
1
23
|
/** これを超えたら、その rule は (b) ではなく (c) にすべきというサイン。 */
|
|
2
24
|
const NUDGE_AT = 5;
|
|
3
25
|
const groupByRule = (files) => {
|
|
@@ -15,16 +37,17 @@ const groupByRule = (files) => {
|
|
|
15
37
|
})
|
|
16
38
|
.sort((left, right) => right.count - left.count);
|
|
17
39
|
};
|
|
18
|
-
const groupLines = (group) => {
|
|
19
|
-
const
|
|
40
|
+
const groupLines = (group, ui) => {
|
|
41
|
+
const text = TEXT[ui];
|
|
42
|
+
const nudge = group.count >= NUDGE_AT ? text.nudge : "";
|
|
20
43
|
const shown = group.files.slice(0, 3).join(", ");
|
|
21
|
-
const rest = group.files.length > 3 ?
|
|
44
|
+
const rest = group.files.length > 3 ? text.more(group.files.length - 3) : "";
|
|
22
45
|
return [
|
|
23
46
|
"",
|
|
24
|
-
` ${group.rule.padEnd(26)}${
|
|
47
|
+
` ${group.rule.padEnd(26)}${text.count(group.count)}${nudge}`,
|
|
25
48
|
` ${shown}${rest}`,
|
|
26
49
|
...(group.count >= NUDGE_AT && group.reasons.length > 0
|
|
27
|
-
? [`
|
|
50
|
+
? [` ${text.reasons(group.reasons.slice(0, 2).join(" / "))}`, ` ${text.relaxAll(group.rule)}`]
|
|
28
51
|
: []),
|
|
29
52
|
];
|
|
30
53
|
};
|
|
@@ -33,17 +56,18 @@ const groupLines = (group) => {
|
|
|
33
56
|
* 同じ rule を何度も黙らせているなら、それは (b) ではなく (c) のサイン。
|
|
34
57
|
* workflow spec §7.3。
|
|
35
58
|
*/
|
|
36
|
-
export const renderSuppressions = (files) => {
|
|
59
|
+
export const renderSuppressions = (files, ui = "ja") => {
|
|
60
|
+
const text = TEXT[ui];
|
|
37
61
|
const groups = groupByRule(files);
|
|
38
62
|
const total = groups.reduce((sum, group) => sum + group.count, 0);
|
|
39
63
|
if (total === 0)
|
|
40
|
-
return
|
|
64
|
+
return text.none;
|
|
41
65
|
const reasonless = files.flatMap((file) => file.reasonless.map(() => file.path));
|
|
42
66
|
return [
|
|
43
67
|
"",
|
|
44
|
-
`
|
|
45
|
-
...groups.flatMap(groupLines),
|
|
46
|
-
...(reasonless.length > 0 ? ["", `
|
|
68
|
+
` ${text.total(total)}`,
|
|
69
|
+
...groups.flatMap((group) => groupLines(group, ui)),
|
|
70
|
+
...(reasonless.length > 0 ? ["", ` ${text.reasonless(reasonless.length)}`, ` ${[...new Set(reasonless)].join(", ")}`] : []),
|
|
47
71
|
"",
|
|
48
72
|
].join("\n");
|
|
49
73
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suppressions.js","sourceRoot":"","sources":["../../src/render/suppressions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"suppressions.js","sourceRoot":"","sources":["../../src/render/suppressions.ts"],"names":[],"mappings":"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"}
|
package/dist/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO/F,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IACrC,+DAA+D;IAC/D,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAmEvD;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,SAAS,cAAc,EAAE,EAAE,UAAU,QAAQ,EAAE,cAAc,OAAO,EAAE,OAAO,MAAM,EAAE,UAAU,MAAM,KAAG,YAKtI,CAAC;AA+BH,+CAA+C;AAC/C,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAItD,eAAO,MAAM,QAAQ,GACnB,KAAK,aAAa,EAClB,OAAO,SAAS,cAAc,EAAE,EAChC,UAAU,QAAQ,EAClB,cAAc,OAAO,EACrB,OAAO,MAAM,EACb,SAAQ,MAAW,KAClB,SAiDF,CAAC"}
|