chaffjs 0.7.0 → 0.8.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/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 +151 -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 +75 -86
- 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/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/tree.d.ts +11 -1
- package/dist/commands/tree.d.ts.map +1 -1
- package/dist/commands/tree.js +18 -6
- package/dist/commands/tree.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/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/plugin.d.ts +6 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/reasons.d.ts +15 -0
- package/dist/reasons.d.ts.map +1 -0
- package/dist/reasons.js +29 -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 +18 -10
- package/dist/run.js.map +1 -1
- package/dist/structure/build.d.ts.map +1 -1
- package/dist/structure/build.js +8 -2
- 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 +27 -9
- 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/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 +3 -2
- package/skills/chaff/SKILL.md +61 -0
- package/src/adapter-load.ts +41 -10
- package/src/cli-args.ts +9 -0
- package/src/cli-text.ts +182 -0
- package/src/cli.ts +91 -89
- package/src/commands/cite.ts +51 -18
- package/src/commands/skill.ts +74 -0
- package/src/commands/tree.ts +27 -7
- package/src/config/rule-problems.ts +24 -5
- package/src/config/write.ts +33 -9
- package/src/genre.ts +4 -4
- package/src/init.ts +74 -15
- package/src/plugin.ts +6 -0
- package/src/reasons.ts +44 -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 +20 -9
- package/src/structure/build.ts +10 -2
- package/src/structure/cite.ts +3 -1
- package/src/structure/issues.ts +33 -14
- package/src/structure/numbering.ts +12 -7
- package/src/ui.ts +23 -0
- package/src/watch.ts +2 -2
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
/** The skill ships in the package, beside rules/. Two levels up from src/commands or dist/commands. */
|
|
5
|
+
export const SKILL_SOURCE = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "skills", "chaff", "SKILL.md");
|
|
6
|
+
/** Where Claude Code reads a skill: this folder's .claude/skills, or the user's. */
|
|
7
|
+
export const skillTarget = (root) => join(root, ".claude", "skills", "chaff", "SKILL.md");
|
|
8
|
+
/**
|
|
9
|
+
* Writes the skill. A file that is already there and differs may have been edited by hand, so it is replaced
|
|
10
|
+
* only with `force`; the same file is left alone.
|
|
11
|
+
*/
|
|
12
|
+
export const installSkill = (skill, target, force) => {
|
|
13
|
+
if (existsSync(target)) {
|
|
14
|
+
const current = readFileSync(target, "utf8");
|
|
15
|
+
if (current === skill)
|
|
16
|
+
return { status: "same", path: target };
|
|
17
|
+
if (!force)
|
|
18
|
+
return { status: "kept", path: target };
|
|
19
|
+
writeFileSync(target, skill, "utf8");
|
|
20
|
+
return { status: "updated", path: target };
|
|
21
|
+
}
|
|
22
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
23
|
+
writeFileSync(target, skill, "utf8");
|
|
24
|
+
return { status: "written", path: target };
|
|
25
|
+
};
|
|
26
|
+
const TEXT = {
|
|
27
|
+
ja: {
|
|
28
|
+
written: (path) => `Claude Code の skill を書きました: ${path}\nClaude Code を開き直すと /chaff で使えます。`,
|
|
29
|
+
updated: (path) => `skill を新しい版に置き換えました: ${path}`,
|
|
30
|
+
same: (path) => `skill は既に最新です: ${path}`,
|
|
31
|
+
kept: (path) => `${path} は手で直されているかもしれないので、置き換えていません。\n置き換えるときは --force を付けてください。`,
|
|
32
|
+
},
|
|
33
|
+
en: {
|
|
34
|
+
written: (path) => `Wrote the Claude Code skill: ${path}\nReopen Claude Code and it is available as /chaff.`,
|
|
35
|
+
updated: (path) => `Replaced the skill with the new version: ${path}`,
|
|
36
|
+
same: (path) => `The skill is up to date: ${path}`,
|
|
37
|
+
kept: (path) => `${path} may have been edited by hand, so it was not replaced.\nAdd --force to replace it.`,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
const FAILED = {
|
|
41
|
+
ja: (path, why) => `skill を ${path} に書けませんでした: ${why}`,
|
|
42
|
+
en: (path, why) => `Could not write the skill to ${path}: ${why}`,
|
|
43
|
+
};
|
|
44
|
+
/** The outcome, or why the file system refused. */
|
|
45
|
+
const attempt = (install) => {
|
|
46
|
+
try {
|
|
47
|
+
return install();
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
return { failure: err instanceof Error ? err.message : String(err) };
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
/** `chaff skill [--global] [--force]`: installs or updates the skill. Exit 1 when a differing file was kept. */
|
|
54
|
+
export const runSkill = (argv, context) => {
|
|
55
|
+
const target = skillTarget(argv.includes("--global") ? context.home : context.cwd);
|
|
56
|
+
const outcome = attempt(() => installSkill(readFileSync(SKILL_SOURCE, "utf8"), target, argv.includes("--force")));
|
|
57
|
+
if ("failure" in outcome) {
|
|
58
|
+
console.error(FAILED[context.ui](target, outcome.failure));
|
|
59
|
+
return 1;
|
|
60
|
+
}
|
|
61
|
+
const say = TEXT[context.ui][outcome.status](outcome.path);
|
|
62
|
+
if (outcome.status === "kept")
|
|
63
|
+
console.error(say);
|
|
64
|
+
else
|
|
65
|
+
console.log(say);
|
|
66
|
+
return outcome.status === "kept" ? 1 : 0;
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/tree.d.ts
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import type { Config } from "../config/load.ts";
|
|
2
2
|
import type { StructureNode } from "../plugin.ts";
|
|
3
|
+
import type { Texts, UiLanguage } from "../ui.ts";
|
|
3
4
|
export type TreeContext = {
|
|
4
5
|
readonly config: Config;
|
|
5
6
|
readonly flag: (argv: readonly string[], name: string) => string | undefined;
|
|
7
|
+
/** The language chaff speaks in here. Japanese when left out. */
|
|
8
|
+
readonly ui?: UiLanguage;
|
|
6
9
|
};
|
|
10
|
+
declare const TEXT: Texts<{
|
|
11
|
+
readonly usage: string;
|
|
12
|
+
readonly unreadable: (path: string, why: string) => string;
|
|
13
|
+
readonly noStructure: (path: string, language: string) => string;
|
|
14
|
+
}>;
|
|
15
|
+
export declare const treeText: (context: TreeContext) => (typeof TEXT)["ja"];
|
|
7
16
|
export declare const treeTargets: (argv: readonly string[]) => string[];
|
|
8
|
-
export declare const readSource: (path: string) => Promise<string | undefined>;
|
|
17
|
+
export declare const readSource: (path: string, context: TreeContext) => Promise<string | undefined>;
|
|
9
18
|
/**
|
|
10
19
|
* 言語の決め方は lint / test / eval と同じ。そのファイルの by_path、全体の language、中身からの推定の順で、
|
|
11
20
|
* その前に --language を置く。混在するリポジトリで、英語の契約書を日本語として読まないため。
|
|
@@ -30,4 +39,5 @@ export declare const inOrder: (paths: readonly string[], each: (path: string) =>
|
|
|
30
39
|
* 書き換えはしない。Markdown でない .txt(見出しの無い契約書)も、行頭の番号で木にする。
|
|
31
40
|
*/
|
|
32
41
|
export declare const runTree: (paths: readonly string[], argv: readonly string[], context: TreeContext) => Promise<number>;
|
|
42
|
+
export {};
|
|
33
43
|
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAElD,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC7E,iEAAiE;IACjE,QAAQ,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;CAC1B,CAAC;AAEF,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC;IAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3D,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;CAClE,CAWA,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,SAAS,WAAW,KAAG,CAAC,OAAO,IAAI,EAAE,IAAI,CAA6B,CAAC;AAOhG,eAAO,MAAM,WAAW,GAAI,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM,EACgD,CAAC;AAE7G,eAAO,MAAM,UAAU,GAAU,MAAM,MAAM,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAO/F,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,SAAS,WAAW,KAAG,MAI3E,CAAC;AAEjC,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAEnF;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAU,MAAM,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAY1H,CAAC;AASF;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAU,OAAO,SAAS,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC,OAAO,CAIvF,CAAC;AAE5B;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAU,OAAO,SAAS,MAAM,EAAE,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,MAAM,CAQrH,CAAC"}
|
package/dist/commands/tree.js
CHANGED
|
@@ -5,17 +5,29 @@ import { guessLanguage } from "../detect.js";
|
|
|
5
5
|
import { isMarkdownPath } from "../structure/markdown-path.js";
|
|
6
6
|
import { buildStructure } from "../structure/of.js";
|
|
7
7
|
import { toSexp } from "../structure/sexp.js";
|
|
8
|
+
const TEXT = {
|
|
9
|
+
ja: {
|
|
10
|
+
usage: "使い方: chaff tree <file>... [--format sexp|json] [--language ja|en|…]",
|
|
11
|
+
unreadable: (path, why) => `${path} を読めませんでした: ${why}`,
|
|
12
|
+
noStructure: (path, language) => `${path}: 言語 ${language} のパッケージは文書の構造を読めません(structure がありません)`,
|
|
13
|
+
},
|
|
14
|
+
en: {
|
|
15
|
+
usage: "usage: chaff tree <file>... [--format sexp|json] [--language ja|en|…]",
|
|
16
|
+
unreadable: (path, why) => `Could not read ${path}: ${why}`,
|
|
17
|
+
noStructure: (path, language) => `${path}: the ${language} package cannot read a document's structure (it has no structure)`,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
export const treeText = (context) => TEXT[context.ui ?? "ja"];
|
|
8
21
|
const FORMATS = ["sexp", "json"];
|
|
9
|
-
const USAGE = "使い方: chaff tree <file>... [--format sexp|json] [--language ja|en|…]";
|
|
10
22
|
/** 値を取るフラグ。その次の引数は値で、対象のファイルではない。 */
|
|
11
23
|
const VALUED = ["--format", "--language"];
|
|
12
24
|
export const treeTargets = (argv) => argv.slice(1).filter((arg, index, all) => !arg.startsWith("--") && !VALUED.includes(all[index - 1] ?? ""));
|
|
13
|
-
export const readSource = async (path) => {
|
|
25
|
+
export const readSource = async (path, context) => {
|
|
14
26
|
try {
|
|
15
27
|
return await readFile(path, "utf8");
|
|
16
28
|
}
|
|
17
29
|
catch (err) {
|
|
18
|
-
console.error(
|
|
30
|
+
console.error(treeText(context).unreadable(path, err instanceof Error ? err.message : String(err)));
|
|
19
31
|
return undefined;
|
|
20
32
|
}
|
|
21
33
|
};
|
|
@@ -32,13 +44,13 @@ export const treeLanguage = (path, source, argv, context) => context.flag(argv,
|
|
|
32
44
|
* chaff tree と chaff cite が同じ木を見るように、ここを一つにしておく。
|
|
33
45
|
*/
|
|
34
46
|
export const readTree = async (path, argv, context) => {
|
|
35
|
-
const source = await readSource(path);
|
|
47
|
+
const source = await readSource(path, context);
|
|
36
48
|
if (source === undefined)
|
|
37
49
|
return undefined;
|
|
38
50
|
const language = treeLanguage(path, source, argv, context);
|
|
39
51
|
const adapter = await loadAdapter(language);
|
|
40
52
|
if (adapter.structure === undefined) {
|
|
41
|
-
console.error(
|
|
53
|
+
console.error(treeText(context).noStructure(path, language));
|
|
42
54
|
return undefined;
|
|
43
55
|
}
|
|
44
56
|
// 日本語は形態素で数量と日付を読む。解析器が無ければ単位の表で読むので、木は作れる。
|
|
@@ -67,7 +79,7 @@ export const inOrder = async (paths, each) => paths.reduce(async (previous, path
|
|
|
67
79
|
export const runTree = async (paths, argv, context) => {
|
|
68
80
|
const format = context.flag(argv, "--format") ?? "sexp";
|
|
69
81
|
if (paths.length === 0 || !FORMATS.includes(format)) {
|
|
70
|
-
console.error(
|
|
82
|
+
console.error(treeText(context).usage);
|
|
71
83
|
return 1;
|
|
72
84
|
}
|
|
73
85
|
const printed = await inOrder(paths, (path) => printTree(path, argv, context));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Config } from "./load.ts";
|
|
2
|
+
import type { UiLanguage } from "../ui.ts";
|
|
2
3
|
/**
|
|
3
4
|
* chaff.yaml の rules のうち、効いていないもの。知らない rule 名と、読めない値。
|
|
4
5
|
* どちらも黙って捨てると、書いた人は設定したつもりで何も変わっていない。打ち間違いがいちばん多い。
|
|
@@ -6,5 +7,5 @@ import type { Config } from "./load.ts";
|
|
|
6
7
|
export declare const ruleProblems: (config: Pick<Config, "rules" | "limits" | "unreadableRules" | "path">, known: readonly {
|
|
7
8
|
readonly id: string;
|
|
8
9
|
readonly layer: string;
|
|
9
|
-
}[]) => string[];
|
|
10
|
+
}[], ui?: UiLanguage) => string[];
|
|
10
11
|
//# sourceMappingURL=rule-problems.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-problems.d.ts","sourceRoot":"","sources":["../../src/config/rule-problems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"rule-problems.d.ts","sourceRoot":"","sources":["../../src/config/rule-problems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,UAAU,CAAC;AAoBlD;;;GAGG;AACH,eAAO,MAAM,YAAY,GACvB,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,iBAAiB,GAAG,MAAM,CAAC,EACrE,OAAO,SAAS;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EACjE,KAAI,UAAiB,KACpB,MAAM,EAaR,CAAC"}
|
|
@@ -1,20 +1,31 @@
|
|
|
1
|
+
const TEXT = {
|
|
2
|
+
ja: {
|
|
3
|
+
unknown: (where, id) => `${where}: ${id} というルールはありません(npx chaff rules --json で一覧が出ます)`,
|
|
4
|
+
unreadable: (where, id, value) => `${where}: ${id} の値 ${value} は読めません(strict / normal / relaxed / off か、正の数)`,
|
|
5
|
+
numberOnSemantic: (where, id) => `${where}: ${id} は意味を読む検査なので数値の上限はありません。normal として動きます(strict / normal / relaxed / off で書いてください)`,
|
|
6
|
+
},
|
|
7
|
+
en: {
|
|
8
|
+
unknown: (where, id) => `${where}: there is no rule named ${id} (npx chaff rules --json lists them)`,
|
|
9
|
+
unreadable: (where, id, value) => `${where}: cannot read ${value} as the level of ${id} (strict / normal / relaxed / off, or a positive number)`,
|
|
10
|
+
numberOnSemantic: (where, id) => `${where}: ${id} reads meaning and has no numeric limit; it runs as normal (write strict / normal / relaxed / off)`,
|
|
11
|
+
},
|
|
12
|
+
};
|
|
1
13
|
/**
|
|
2
14
|
* chaff.yaml の rules のうち、効いていないもの。知らない rule 名と、読めない値。
|
|
3
15
|
* どちらも黙って捨てると、書いた人は設定したつもりで何も変わっていない。打ち間違いがいちばん多い。
|
|
4
16
|
*/
|
|
5
|
-
export const ruleProblems = (config, known) => {
|
|
17
|
+
export const ruleProblems = (config, known, ui = "ja") => {
|
|
18
|
+
const text = TEXT[ui];
|
|
6
19
|
const knownIds = new Set(known.map((rule) => rule.id));
|
|
7
20
|
const where = config.path ?? "chaff.yaml";
|
|
8
21
|
const written = [...new Set([...Object.keys(config.rules), ...Object.keys(config.limits), ...config.unreadableRules.map((entry) => entry.id)])];
|
|
9
|
-
const unknown = written.filter((id) => !knownIds.has(id)).map((id) =>
|
|
10
|
-
const unreadable = config.unreadableRules
|
|
11
|
-
.filter((entry) => knownIds.has(entry.id))
|
|
12
|
-
.map((entry) => `${where}: ${entry.id} の値 ${entry.value} は読めません(strict / normal / relaxed / off か、正の数)`);
|
|
22
|
+
const unknown = written.filter((id) => !knownIds.has(id)).map((id) => text.unknown(where, id));
|
|
23
|
+
const unreadable = config.unreadableRules.filter((entry) => knownIds.has(entry.id)).map((entry) => text.unreadable(where, entry.id, entry.value));
|
|
13
24
|
// 意味を読む検査(L4)に閾値は無い。数を書いても normal として動くので、そう言う。
|
|
14
25
|
const semantic = new Set(known.filter((rule) => rule.layer === "L4").map((rule) => rule.id));
|
|
15
26
|
const numberOnSemantic = Object.keys(config.limits)
|
|
16
27
|
.filter((id) => semantic.has(id))
|
|
17
|
-
.map((id) =>
|
|
28
|
+
.map((id) => text.numberOnSemantic(where, id));
|
|
18
29
|
return [...unknown, ...unreadable, ...numberOnSemantic];
|
|
19
30
|
};
|
|
20
31
|
//# sourceMappingURL=rule-problems.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-problems.js","sourceRoot":"","sources":["../../src/config/rule-problems.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rule-problems.js","sourceRoot":"","sources":["../../src/config/rule-problems.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/config/write.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/config/write.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAmC1D,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAc/E;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,MAAM,cAAc,EAAE,OAAO,KAAK,EAAE,KAAK,MAAM,GAAG,SAAS,EAAE,UAAU,MAAM,EAAE,KAAK,MAAM,KAAG,aA4BrI,CAAC"}
|
package/dist/config/write.js
CHANGED
|
@@ -2,13 +2,33 @@ import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
2
2
|
import { Scalar, YAMLMap, isMap, isScalar, parseDocument } from "yaml";
|
|
3
3
|
import { definedLevels } from "../levels.js";
|
|
4
4
|
import { localized } from "../render/text.js";
|
|
5
|
-
|
|
5
|
+
import { uiLanguageOf } from "../ui.js";
|
|
6
|
+
const TEXT = {
|
|
7
|
+
ja: {
|
|
8
|
+
template: `# chaff.yaml — このチームの文章規範
|
|
6
9
|
#
|
|
7
10
|
# ここに書くのは「既定から変えたもの」だけです。
|
|
8
11
|
# 値は strict / normal / relaxed / off の 4 つから選びます。数字は要りません。
|
|
9
12
|
|
|
10
13
|
rules:
|
|
11
|
-
|
|
14
|
+
`,
|
|
15
|
+
noSuchLevel: (id, level) => `${id} に ${level} はありません。normal と同じ設定です。\n設定は変更しませんでした。`,
|
|
16
|
+
hasReason: (id, previous) => `${id} には既に理由が書かれています:\n ${previous}\n値を変えるときは --why で新しい理由を書いてください。`,
|
|
17
|
+
done: (id, level, path) => `${id} を ${level} にしました(${path})`,
|
|
18
|
+
},
|
|
19
|
+
en: {
|
|
20
|
+
template: `# chaff.yaml — this team's writing rules
|
|
21
|
+
#
|
|
22
|
+
# Write only what differs from the defaults.
|
|
23
|
+
# A level is one of strict / normal / relaxed / off. No numbers needed.
|
|
24
|
+
|
|
25
|
+
rules:
|
|
26
|
+
`,
|
|
27
|
+
noSuchLevel: (id, level) => `${id} has no ${level} level; it is the same as normal.\nThe settings were not changed.`,
|
|
28
|
+
hasReason: (id, previous) => `${id} already has a reason:\n ${previous}\nTo change the level, give a new reason with --why.`,
|
|
29
|
+
done: (id, level, path) => `Set ${id} to ${level} (${path})`,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
12
32
|
const today = () => new Date().toISOString().slice(0, 10);
|
|
13
33
|
const reasonOf = (value) => {
|
|
14
34
|
if (!isScalar(value) || typeof value.comment !== "string")
|
|
@@ -17,17 +37,17 @@ const reasonOf = (value) => {
|
|
|
17
37
|
return text.length === 0 ? undefined : text;
|
|
18
38
|
};
|
|
19
39
|
const ruleComment = (rule, language) => ` ${localized(rule.name, language)}\n ${localized(rule.why, language)}`;
|
|
20
|
-
const load = (path) => parseDocument(existsSync(path) ? readFileSync(path, "utf8") :
|
|
40
|
+
const load = (path, language) => parseDocument(existsSync(path) ? readFileSync(path, "utf8") : TEXT[uiLanguageOf(language)].template);
|
|
21
41
|
/**
|
|
22
42
|
* 設定を機械的に書き換えるが、**既存のコメントを壊さない**。
|
|
23
43
|
* 設定ファイルがチームの規範そのものである以上、コメントが失われることは規範が失われること。
|
|
24
44
|
* spec §19.4。
|
|
25
45
|
*/
|
|
26
46
|
export const applyLevel = (path, rule, level, why, language, who) => {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const doc = load(path);
|
|
47
|
+
const text = TEXT[uiLanguageOf(language)];
|
|
48
|
+
if (!definedLevels(rule).includes(level))
|
|
49
|
+
return { ok: false, message: text.noSuchLevel(rule.id, level) };
|
|
50
|
+
const doc = load(path, language);
|
|
31
51
|
const rules = doc.get("rules");
|
|
32
52
|
const map = isMap(rules) ? rules : new YAMLMap();
|
|
33
53
|
// 人が読んで書き足すファイルなので、必ず block style にする。flow style({ a: b })は読めない。
|
|
@@ -38,7 +58,7 @@ export const applyLevel = (path, rule, level, why, language, who) => {
|
|
|
38
58
|
const previous = reasonOf(existing?.value);
|
|
39
59
|
// 古い理由が新しい値に付いたまま残ると、履歴が嘘になる。
|
|
40
60
|
if (previous !== undefined && why === undefined) {
|
|
41
|
-
return { ok: false, message:
|
|
61
|
+
return { ok: false, message: text.hasReason(rule.id, previous) };
|
|
42
62
|
}
|
|
43
63
|
// 取り除いて足し直すと、元の rule に付いていた説明コメントが行き場を失って残る。
|
|
44
64
|
// 既にある鍵は、その場で値だけ差し替える。
|
|
@@ -55,6 +75,6 @@ export const applyLevel = (path, rule, level, why, language, who) => {
|
|
|
55
75
|
existing.value = value;
|
|
56
76
|
}
|
|
57
77
|
writeFileSync(path, String(doc), "utf8");
|
|
58
|
-
return { ok: true, message:
|
|
78
|
+
return { ok: true, message: text.done(rule.id, level, path) };
|
|
59
79
|
};
|
|
60
80
|
//# sourceMappingURL=write.js.map
|
package/dist/config/write.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/config/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAiB,MAAM,MAAM,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/config/write.ts"],"names":[],"mappings":"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"}
|
package/dist/genre.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type GenreGuess = {
|
|
2
2
|
readonly genre: string;
|
|
3
|
-
readonly from:
|
|
3
|
+
readonly from: "front-matter" | "path" | "content";
|
|
4
4
|
};
|
|
5
5
|
export declare const guessGenre: (path: string, source: string, front: string | undefined) => GenreGuess | undefined;
|
|
6
6
|
/** front matter の genre / type を拾う。失敗しても落とさない。 */
|
package/dist/genre.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genre.d.ts","sourceRoot":"","sources":["../src/genre.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"genre.d.ts","sourceRoot":"","sources":["../src/genre.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AA4BxG,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,EAAE,OAAO,MAAM,GAAG,SAAS,KAAG,UAAU,GAAG,SAOjG,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,SAI1D,CAAC"}
|
package/dist/genre.js
CHANGED
|
@@ -24,13 +24,13 @@ const BY_CONTENT = [
|
|
|
24
24
|
];
|
|
25
25
|
export const guessGenre = (path, source, front) => {
|
|
26
26
|
if (front !== undefined)
|
|
27
|
-
return { genre: front, from: "front
|
|
27
|
+
return { genre: front, from: "front-matter" };
|
|
28
28
|
const byPath = BY_PATH.find(([pattern]) => pattern.test(path));
|
|
29
29
|
if (byPath !== undefined)
|
|
30
|
-
return { genre: byPath[1], from: "
|
|
30
|
+
return { genre: byPath[1], from: "path" };
|
|
31
31
|
const byContent = BY_CONTENT.find(([pattern]) => pattern.test(source));
|
|
32
32
|
if (byContent !== undefined)
|
|
33
|
-
return { genre: byContent[1], from: "
|
|
33
|
+
return { genre: byContent[1], from: "content" };
|
|
34
34
|
return undefined;
|
|
35
35
|
};
|
|
36
36
|
/** front matter の genre / type を拾う。失敗しても落とさない。 */
|
package/dist/genre.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genre.js","sourceRoot":"","sources":["../src/genre.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,GAA2C;IACtD,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;IAC3C,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IACtC,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;IAC5C,CAAC,8BAA8B,EAAE,mBAAmB,CAAC;IACrD,CAAC,8BAA8B,EAAE,wBAAwB,CAAC;IAC1D,CAAC,sBAAsB,EAAE,wBAAwB,CAAC;IAClD,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;IAC3C,CAAC,mCAAmC,EAAE,WAAW,CAAC;IAClD,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,GAA2C;IACzD,CAAC,gDAAgD,EAAE,wBAAwB,CAAC;IAC5E,CAAC,4CAA4C,EAAE,wBAAwB,CAAC;IACxE,CAAC,uBAAuB,EAAE,iBAAiB,CAAC;CAC7C,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,KAAyB,EAA0B,EAAE;IAC5G,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"genre.js","sourceRoot":"","sources":["../src/genre.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,GAA2C;IACtD,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;IAC3C,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IACtC,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;IAC5C,CAAC,8BAA8B,EAAE,mBAAmB,CAAC;IACrD,CAAC,8BAA8B,EAAE,wBAAwB,CAAC;IAC1D,CAAC,sBAAsB,EAAE,wBAAwB,CAAC;IAClD,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;IAC3C,CAAC,mCAAmC,EAAE,WAAW,CAAC;IAClD,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,GAA2C;IACzD,CAAC,gDAAgD,EAAE,wBAAwB,CAAC;IAC5E,CAAC,4CAA4C,EAAE,wBAAwB,CAAC;IACxE,CAAC,uBAAuB,EAAE,iBAAiB,CAAC;CAC7C,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,KAAyB,EAA0B,EAAE;IAC5G,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACpE,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7E,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,kDAAkD;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAsB,EAAE;IACrE,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC"}
|
package/dist/init.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import type { UiLanguage } from "./ui.ts";
|
|
2
|
+
export declare const runInit: (dir: string, genre: string, ui?: UiLanguage) => string[];
|
|
2
3
|
export declare const GENRES: readonly string[];
|
|
3
4
|
//# sourceMappingURL=init.d.ts.map
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,SAAS,CAAC;AA4GjD,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,KAAI,UAAiB,KAAG,MAAM,EAgBjF,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,SAAS,MAAM,EAWnC,CAAC"}
|
package/dist/init.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { appendFileSync, existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
const
|
|
3
|
+
const TEXT = {
|
|
4
|
+
ja: {
|
|
5
|
+
config: (genre) => `# chaff.yaml — このチームの文章規範
|
|
4
6
|
#
|
|
5
7
|
# ここに書くのは「既定から変えたもの」だけです。書かなければ既定で動きます。
|
|
6
8
|
# このファイルを消しても chaff は動きます。
|
|
@@ -23,7 +25,53 @@ genre: ${genre}
|
|
|
23
25
|
|
|
24
26
|
# 既定から変えたものだけを書く。
|
|
25
27
|
rules:
|
|
26
|
-
|
|
28
|
+
`,
|
|
29
|
+
created: "作成しました",
|
|
30
|
+
appended: (lines) => `${lines.join(" と ")} を追記しました`,
|
|
31
|
+
configNote: "規範の宣言。commit してください",
|
|
32
|
+
exists: "chaff.yaml は既にあります。変更していません。",
|
|
33
|
+
createdHeading: "作成しました:",
|
|
34
|
+
genreChosen: (genre) => `ジャンルは ${genre} にしました。違う場合は chaff.yaml の genre を直してください。`,
|
|
35
|
+
genreList: " 一覧: npx chaff genres",
|
|
36
|
+
next: "次:",
|
|
37
|
+
nextCheck: " npx chaff . この場所の Markdown を全部見る",
|
|
38
|
+
},
|
|
39
|
+
en: {
|
|
40
|
+
config: (genre) => `# chaff.yaml — this team's writing rules
|
|
41
|
+
#
|
|
42
|
+
# Write only what differs from the defaults; anything left out uses the default.
|
|
43
|
+
# chaff still runs if this file is deleted.
|
|
44
|
+
#
|
|
45
|
+
# A level is one of four words. No numbers needed.
|
|
46
|
+
#
|
|
47
|
+
# strict check closely
|
|
48
|
+
# normal the default
|
|
49
|
+
# relaxed check loosely
|
|
50
|
+
# off do not check
|
|
51
|
+
#
|
|
52
|
+
# Commands change it too, and leave the reason as a comment.
|
|
53
|
+
#
|
|
54
|
+
# npx chaff relax bold-density --why "figure captions use a lot of bold"
|
|
55
|
+
# npx chaff explain bold-density read what the rule is for
|
|
56
|
+
# npx chaff rules --json give this to an AI that writes the settings
|
|
57
|
+
|
|
58
|
+
# The kind of document kept here.
|
|
59
|
+
genre: ${genre}
|
|
60
|
+
|
|
61
|
+
# Only what differs from the defaults.
|
|
62
|
+
rules:
|
|
63
|
+
`,
|
|
64
|
+
created: "created",
|
|
65
|
+
appended: (lines) => `added ${lines.join(" and ")}`,
|
|
66
|
+
configNote: "the team's rules; commit it",
|
|
67
|
+
exists: "chaff.yaml already exists. Nothing was changed.",
|
|
68
|
+
createdHeading: "Created:",
|
|
69
|
+
genreChosen: (genre) => `The genre is ${genre}. If that is wrong, change genre in chaff.yaml.`,
|
|
70
|
+
genreList: " List: npx chaff genres",
|
|
71
|
+
next: "Next:",
|
|
72
|
+
nextCheck: " npx chaff . check every Markdown file here",
|
|
73
|
+
},
|
|
74
|
+
};
|
|
27
75
|
/** 判定のキャッシュと、鍵を書くファイル。どちらも commit しない。 */
|
|
28
76
|
const GITIGNORE_LINES = [".chaff-cache/", ".env*"];
|
|
29
77
|
const writeIfAbsent = (path, body, note) => {
|
|
@@ -33,31 +81,32 @@ const writeIfAbsent = (path, body, note) => {
|
|
|
33
81
|
return { path, note };
|
|
34
82
|
};
|
|
35
83
|
/** 判定のキャッシュと .env は commit しない。init が .gitignore に足す。 */
|
|
36
|
-
const ensureGitignore = (dir) => {
|
|
84
|
+
const ensureGitignore = (dir, text) => {
|
|
37
85
|
const path = join(dir, ".gitignore");
|
|
38
86
|
if (!existsSync(path))
|
|
39
|
-
return writeIfAbsent(path, `${GITIGNORE_LINES.join("\n")}\n`,
|
|
87
|
+
return writeIfAbsent(path, `${GITIGNORE_LINES.join("\n")}\n`, text.created);
|
|
40
88
|
const body = readFileSync(path, "utf8");
|
|
41
89
|
const missing = GITIGNORE_LINES.filter((line) => !body.split("\n").includes(line));
|
|
42
90
|
if (missing.length === 0)
|
|
43
91
|
return undefined;
|
|
44
92
|
appendFileSync(path, `${missing.join("\n")}\n`, "utf8");
|
|
45
|
-
return { path, note:
|
|
93
|
+
return { path, note: text.appended(missing) };
|
|
46
94
|
};
|
|
47
|
-
export const runInit = (dir, genre) => {
|
|
48
|
-
const
|
|
95
|
+
export const runInit = (dir, genre, ui = "ja") => {
|
|
96
|
+
const text = TEXT[ui];
|
|
97
|
+
const made = [writeIfAbsent(join(dir, "chaff.yaml"), text.config(genre), text.configNote), ensureGitignore(dir, text)].filter((entry) => entry !== undefined);
|
|
49
98
|
if (made.length === 0)
|
|
50
|
-
return [
|
|
99
|
+
return [text.exists];
|
|
51
100
|
return [
|
|
52
101
|
"",
|
|
53
|
-
|
|
102
|
+
text.createdHeading,
|
|
54
103
|
...made.map((entry) => ` ${entry.path} ${entry.note}`),
|
|
55
104
|
"",
|
|
56
|
-
|
|
57
|
-
|
|
105
|
+
text.genreChosen(genre),
|
|
106
|
+
text.genreList,
|
|
58
107
|
"",
|
|
59
|
-
|
|
60
|
-
|
|
108
|
+
text.next,
|
|
109
|
+
text.nextCheck,
|
|
61
110
|
"",
|
|
62
111
|
];
|
|
63
112
|
};
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -98,6 +98,8 @@ export type NumberedLine = {
|
|
|
98
98
|
* 枝番号(第3条の2)は並びの外なので付けない。読み方を知っているのは言語パッケージだけなので、core は計算しない。
|
|
99
99
|
*/
|
|
100
100
|
readonly ordinal?: number | undefined;
|
|
101
|
+
/** 一行で番号の範囲をまとめるとき(「第四十三条から第五十五条まで 削除」)の最後の位置。次の番号はここから数える。 */
|
|
102
|
+
readonly ordinalTo?: number | undefined;
|
|
101
103
|
};
|
|
102
104
|
/** 番号を読むときに見える周り。「(i)」がローマ数字か英字かは、開いている番号で決まる。 */
|
|
103
105
|
export type NumberingContext = {
|
|
@@ -141,6 +143,10 @@ export type StructureNode = {
|
|
|
141
143
|
readonly children: readonly StructureNode[];
|
|
142
144
|
/** 番号付きのまとまりの、並びの中の位置(NumberedLine.ordinal)。S 式には出さない。 */
|
|
143
145
|
readonly ordinal?: number;
|
|
146
|
+
/** 番号付きのまとまりの深さ(NumberedLine.depth)。項と号のように、同じ親の下で別の並びを分ける。S 式には出さない。 */
|
|
147
|
+
readonly level?: number;
|
|
148
|
+
/** 範囲をまとめた行の最後の位置(NumberedLine.ordinalTo)。S 式には出さない。 */
|
|
149
|
+
readonly ordinalTo?: number;
|
|
144
150
|
};
|
|
145
151
|
export type Section = {
|
|
146
152
|
/** 見出しの深さ。見出しより前の導入部は 0。 */
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|