paperlint 2.0.1 → 3.0.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/CLAUDE.md +6 -1
- package/CONTRIBUTING.md +21 -0
- package/README.md +231 -180
- package/action.yml +4 -6
- package/dist/adapters/references/index.d.ts +13 -0
- package/dist/adapters/references/index.d.ts.map +1 -0
- package/dist/adapters/references/index.js +55 -0
- package/dist/adapters/references/index.js.map +1 -0
- package/dist/adapters/references/reach.io.d.ts +3 -0
- package/dist/adapters/references/reach.io.d.ts.map +1 -0
- package/dist/adapters/references/reach.io.js +14 -0
- package/dist/adapters/references/reach.io.js.map +1 -0
- package/dist/build-engine.d.ts.map +1 -1
- package/dist/build-engine.js +5 -2
- package/dist/build-engine.js.map +1 -1
- package/dist/build.d.ts +16 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +40 -5
- package/dist/build.js.map +1 -1
- package/dist/cli.d.ts +37 -20
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +377 -251
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +37 -52
- package/dist/doctor.js.map +1 -1
- package/dist/facts-file.d.ts +33 -9
- package/dist/facts-file.d.ts.map +1 -1
- package/dist/facts-file.js +117 -17
- package/dist/facts-file.js.map +1 -1
- package/dist/hooks-settings.d.ts +0 -21
- package/dist/hooks-settings.d.ts.map +1 -1
- package/dist/hooks-settings.js +17 -135
- package/dist/hooks-settings.js.map +1 -1
- package/dist/init.d.ts +40 -19
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +144 -109
- package/dist/init.js.map +1 -1
- package/dist/link-skills.d.ts +1 -1
- package/dist/link-skills.d.ts.map +1 -1
- package/dist/link-skills.js +11 -29
- package/dist/link-skills.js.map +1 -1
- package/dist/new-paper.d.ts +2 -2
- package/dist/new-paper.d.ts.map +1 -1
- package/dist/new-paper.js +6 -2
- package/dist/new-paper.js.map +1 -1
- package/dist/paper-files.d.ts +63 -0
- package/dist/paper-files.d.ts.map +1 -0
- package/dist/paper-files.js +69 -0
- package/dist/paper-files.js.map +1 -0
- package/dist/paper-settings.d.ts +40 -0
- package/dist/paper-settings.d.ts.map +1 -0
- package/dist/paper-settings.js +144 -0
- package/dist/paper-settings.js.map +1 -0
- package/dist/ports/check-references.d.ts +31 -0
- package/dist/ports/check-references.d.ts.map +1 -0
- package/dist/ports/check-references.js +7 -0
- package/dist/ports/check-references.js.map +1 -0
- package/dist/presets.d.ts +84 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +184 -0
- package/dist/presets.js.map +1 -0
- package/dist/reference-rules.d.ts +47 -0
- package/dist/reference-rules.d.ts.map +1 -0
- package/dist/reference-rules.js +156 -0
- package/dist/reference-rules.js.map +1 -0
- package/dist/references.d.ts +36 -0
- package/dist/references.d.ts.map +1 -0
- package/dist/references.js +91 -0
- package/dist/references.js.map +1 -0
- package/dist/rules-config.d.ts +11 -2
- package/dist/rules-config.d.ts.map +1 -1
- package/dist/rules-config.js +25 -11
- package/dist/rules-config.js.map +1 -1
- package/dist/structure.d.ts.map +1 -1
- package/dist/structure.js +3 -2
- package/dist/structure.js.map +1 -1
- package/dist/tex-requirements.d.ts +63 -7
- package/dist/tex-requirements.d.ts.map +1 -1
- package/dist/tex-requirements.js +91 -24
- package/dist/tex-requirements.js.map +1 -1
- package/dist/types.d.ts +20 -18
- package/dist/types.d.ts.map +1 -1
- package/dist/venue-rules.d.ts +109 -0
- package/dist/venue-rules.d.ts.map +1 -0
- package/dist/venue-rules.js +389 -0
- package/dist/venue-rules.js.map +1 -0
- package/docs/configuration.md +152 -77
- package/docs/e2e.md +1 -1
- package/docs/install.md +25 -40
- package/docs/optional-rules.md +26 -24
- package/docs/rules.md +181 -15
- package/eslint-rules/bib-reachable-entry.mjs +75 -0
- package/eslint-rules/latex-language.mjs +29 -1
- package/eslint-rules/paper-stages.harness.mjs +1 -117
- package/eslint-rules/paper-stages.mjs +0 -120
- package/eslint-rules/paper-stages.mutations.mjs +0 -76
- package/eslint-rules/paper-typography.mjs +267 -192
- package/eslint-rules/paper-typography.test.mjs +297 -0
- package/eslint-rules/papers.harness.mjs +8 -12
- package/eslint-rules/papers.mjs +17 -27
- package/eslint-rules/pdf-last-page-balance.mjs +23 -5
- package/eslint-rules/review-frontmatter.mjs +118 -0
- package/eslint-rules/review-frontmatter.schema.json +36 -0
- package/eslint-rules/review-frontmatter.test.mjs +118 -0
- package/eslint-rules/sibling-frontmatter.mjs +19 -0
- package/eslint-rules/sibling-frontmatter.schema.json +14 -0
- package/eslint.config.mjs +0 -15
- package/fixtures/build-e2e/acmart/paperlint.json +1 -0
- package/fixtures/real-markdown-paper/baseline.json +6 -7
- package/hooks/hooks.harness.mjs +39 -98
- package/hooks/hooks.mutations.mjs +6 -6
- package/hooks/paper-edit-guard.hook.d.mts +2 -3
- package/hooks/paper-edit-guard.hook.mjs +31 -42
- package/hooks/paper-skills-nudge.hook.mjs +21 -19
- package/hooks/paper-status-gates.hook.mjs +21 -19
- package/hooks/paper-status-gates.sh +8 -13
- package/lib/paper-config.d.mts +15 -18
- package/lib/paper-config.harness.mjs +18 -35
- package/lib/paper-config.mjs +90 -81
- package/lib/paper-config.mutations.mjs +2 -2
- package/lib/skill-checks.mjs +1 -1
- package/lib/skill-trigger-cases.harness.mjs +9 -8
- package/lib/skill-trigger-cases.mjs +7 -15
- package/package.json +1 -1
- package/scripts/eslint-report-guard.mjs +1 -1
- package/scripts/harness-api.frozen.json +0 -3
- package/scripts/mutation-batteries.frozen.json +4 -13
- package/skills/analyze-sibling-paper/SKILL.md +16 -12
- package/skills/analyze-sibling-paper/SKILL.md.spec.ts +15 -11
- package/skills/cold-read-diff/SKILL.md +20 -1
- package/skills/cold-read-diff/SKILL.md.spec.ts +19 -0
- package/skills/find-venue/SKILL.md +5 -1
- package/skills/find-venue/SKILL.md.spec.ts +4 -0
- package/skills/grade-paper-writing/SKILL.md +20 -1
- package/skills/grade-paper-writing/SKILL.md.spec.ts +19 -0
- package/skills/paper-pipeline/PIPELINE-MAP.md +14 -4
- package/skills/paper-pipeline/SKILL.md +4 -3
- package/skills/paper-pipeline/SKILL.md.spec.ts +3 -2
- package/skills/paper-pipeline/scripts/consumer.d.mts +0 -1
- package/skills/paper-pipeline/scripts/consumer.harness.mjs +8 -12
- package/skills/paper-pipeline/scripts/consumer.mjs +19 -33
- package/skills/paper-pipeline/scripts/extract-ref-facts.harness.mjs +6 -4
- package/skills/paper-pipeline/scripts/run-mechanical.mjs +2 -11
- package/skills/plan-paper-timeline/SKILL.md +2 -2
- package/skills/plan-paper-timeline/SKILL.md.spec.ts +1 -1
- package/skills/plan-paper-timeline/plan-paper-timeline.effects.harness.mjs +1 -1
- package/skills/plan-paper-timeline/plan-paper-timeline.effects.mutations.mjs +2 -2
- package/skills/render-paper/check-render.sh +2 -3
- package/skills/render-paper/extract-pdf-facts.harness.mjs +5 -5
- package/skills/render-paper/extract-pdf-facts.mjs +4 -4
- package/skills/render-paper/render-paper.harness.mjs +2 -2
- package/skills/study-accepted-papers/SKILL.md +2 -1
- package/skills/study-accepted-papers/SKILL.md.spec.ts +1 -0
- package/skills/submit-paper/SKILL.md +9 -1
- package/skills/submit-paper/SKILL.md.spec.ts +8 -0
- package/skills/submit-paper/references/venues/acm-sigconf.jsonc +86 -0
- package/skills/submit-paper/references/venues/agenticdev.jsonc +34 -102
- package/skills/submit-paper/references/venues/aisec.jsonc +21 -82
- package/skills/submit-paper/references/venues/realm.jsonc +45 -43
- package/skills/submit-paper/references/venues/tex-base.jsonc +1 -1
- package/skills/submit-paper/references/venues/venue-profile.schema.json +119 -29
- package/skills/verify-citations/SKILL.md +10 -1
- package/skills/verify-citations/SKILL.md.spec.ts +9 -0
- package/skills/verify-citations/scripts/bib-authors.mjs +48 -26
- package/src/adapters/references/index.ts +102 -0
- package/src/adapters/references/reach.io.ts +12 -0
- package/src/build-engine.ts +10 -2
- package/src/build.harness.mjs +31 -22
- package/src/build.ts +65 -8
- package/src/cli.harness.mjs +151 -294
- package/src/cli.mutations.mjs +35 -44
- package/src/cli.ts +457 -288
- package/src/doctor.harness.mjs +41 -84
- package/src/doctor.mutations.mjs +9 -9
- package/src/doctor.ts +41 -61
- package/src/facts-file.test.ts +47 -7
- package/src/facts-file.ts +145 -24
- package/src/hooks-settings.harness.mjs +7 -92
- package/src/hooks-settings.mutations.mjs +2 -17
- package/src/hooks-settings.ts +18 -162
- package/src/init.test.ts +206 -0
- package/src/init.ts +193 -159
- package/src/link-skills.harness.mjs +1 -38
- package/src/link-skills.mutations.mjs +9 -5
- package/src/link-skills.ts +10 -34
- package/src/lint-fix.test.ts +120 -0
- package/src/new-paper.harness.mjs +9 -6
- package/src/new-paper.test.ts +133 -0
- package/src/new-paper.ts +7 -2
- package/src/paper-files.test.ts +290 -0
- package/src/paper-files.ts +144 -0
- package/src/paper-settings-commands.test.ts +274 -0
- package/src/paper-settings.test.ts +249 -0
- package/src/paper-settings.ts +208 -0
- package/src/ports/check-references.ts +28 -0
- package/src/presets.test.ts +236 -0
- package/src/presets.ts +297 -0
- package/src/reference-rules.ts +229 -0
- package/src/references.test.ts +209 -0
- package/src/references.ts +138 -0
- package/src/rules-config.harness.mjs +24 -8
- package/src/rules-config.ts +30 -13
- package/src/structure.harness.mjs +6 -4
- package/src/structure.ts +3 -2
- package/src/tex-requirements.harness.mjs +11 -17
- package/src/tex-requirements.ts +179 -29
- package/src/types.ts +30 -18
- package/src/venue-rules.test.ts +554 -0
- package/src/venue-rules.ts +571 -0
- package/templates/paper/paperlint.json +4 -0
- package/eslint-rules/doc-fields.harness.mjs +0 -336
- package/eslint-rules/doc-fields.mjs +0 -186
- package/eslint-rules/doc-fields.mutations.mjs +0 -96
- package/eslint-rules/paper-typography.harness.mjs +0 -291
- package/eslint-rules/paper-typography.mutations.mjs +0 -131
- package/eslint-rules/review-findings-cause.harness.mjs +0 -228
- package/eslint-rules/review-findings-cause.mjs +0 -135
- package/eslint-rules/review-findings-cause.mutations.mjs +0 -72
- package/fixtures/build-e2e/acmart/venue.json +0 -1
- package/fixtures/paper-stages/authors-ran/PIPELINE-STATUS.md +0 -16
- package/fixtures/paper-stages/marker-in-prose/PIPELINE-STATUS.md +0 -17
- package/fixtures/review-findings-cause/clean.md +0 -17
- package/fixtures/review-findings-cause/defect.md +0 -14
- package/fixtures/review-findings-cause/old-debt.md +0 -14
- package/fixtures/review-findings-cause/quiet-in-fence.md +0 -16
package/dist/rules-config.js
CHANGED
|
@@ -43,17 +43,22 @@ function parseEntry(v) {
|
|
|
43
43
|
return null;
|
|
44
44
|
return v;
|
|
45
45
|
}
|
|
46
|
-
/**
|
|
47
|
-
|
|
46
|
+
/**
|
|
47
|
+
* A `rules` object — rule id → severity or `[severity, ...options]` — with only the rules paperlint
|
|
48
|
+
* ships. Read from every `paperlint.json`, the root's and each paper's.
|
|
49
|
+
*
|
|
50
|
+
* @param where the key path to name in messages, e.g. `package.json → "paperlint".rules[0].rules`
|
|
51
|
+
*/
|
|
52
|
+
export function parseRuleEntries(v, where, shipped) {
|
|
48
53
|
if (typeof v !== "object" || v === null || Array.isArray(v))
|
|
49
|
-
return bad(`${
|
|
54
|
+
return bad(`${where} must be an object of rule id → severity`);
|
|
50
55
|
const out = {};
|
|
51
56
|
for (const [id, raw] of Object.entries(v)) {
|
|
52
57
|
if (!shipped.has(id))
|
|
53
|
-
return bad(`${
|
|
58
|
+
return bad(`${where}: "${id}" is not a rule paperlint ships — known: ${[...shipped].sort().join(", ")}`);
|
|
54
59
|
const entry = parseEntry(raw);
|
|
55
60
|
if (entry === null)
|
|
56
|
-
return bad(`${
|
|
61
|
+
return bad(`${where}["${id}"]: ${JSON.stringify(raw)} is not a severity — use "off", "warn" or "error", or ["error", { options }]`);
|
|
57
62
|
out[id] = entry;
|
|
58
63
|
}
|
|
59
64
|
return { ok: true, value: out };
|
|
@@ -70,9 +75,10 @@ const globsOf = (o) => ({
|
|
|
70
75
|
...(o["files"] ? { files: o["files"] } : {}),
|
|
71
76
|
...(o["ignores"] ? { ignores: o["ignores"] } : {}),
|
|
72
77
|
});
|
|
78
|
+
const isRecord = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
73
79
|
/** One element of the `rules` list. */
|
|
74
80
|
function parseBlock(v, at, ctx) {
|
|
75
|
-
if (
|
|
81
|
+
if (!isRecord(v))
|
|
76
82
|
return bad(`${at} must be an object like { "files": [...], "rules": {...} }`);
|
|
77
83
|
const o = v;
|
|
78
84
|
const extra = Object.keys(o).filter((k) => !BLOCK_KEYS.has(k));
|
|
@@ -81,7 +87,7 @@ function parseBlock(v, at, ctx) {
|
|
|
81
87
|
const globs = badGlobs(o, at);
|
|
82
88
|
if (globs)
|
|
83
89
|
return bad(globs);
|
|
84
|
-
const rules =
|
|
90
|
+
const rules = parseRuleEntries(o["rules"], `${at}.rules`, ctx.shipped);
|
|
85
91
|
if (!rules.ok)
|
|
86
92
|
return rules;
|
|
87
93
|
return {
|
|
@@ -90,21 +96,29 @@ function parseBlock(v, at, ctx) {
|
|
|
90
96
|
};
|
|
91
97
|
}
|
|
92
98
|
/**
|
|
93
|
-
* The `rules` key → config blocks, or one error naming the key path.
|
|
99
|
+
* The `rules` key → config blocks, or one error naming the key path. Two shapes, at every level:
|
|
100
|
+
* `{ id: severity }` is one block over every paper file under `baseDir`; a list is ESLint blocks
|
|
101
|
+
* (`files`, `ignores`, `rules`), their globs relative to `baseDir`.
|
|
94
102
|
*
|
|
95
103
|
* @param raw the value under `rules` (undefined when absent)
|
|
96
|
-
* @param where how the settings are named in messages, e.g. `
|
|
104
|
+
* @param where how the settings are named in messages, e.g. `paperlint.json`
|
|
97
105
|
* @param shipped the rule ids paperlint ships (`shippedRuleIds`)
|
|
98
106
|
* @param baseDir the directory of the file holding the settings
|
|
99
107
|
*/
|
|
100
108
|
export function parseRuleBlocks(raw, where, shipped, baseDir) {
|
|
101
109
|
if (raw === undefined)
|
|
102
110
|
return { ok: true, value: [] };
|
|
111
|
+
if (isRecord(raw)) {
|
|
112
|
+
const rules = parseRuleEntries(raw, `${where} → "rules"`, shipped);
|
|
113
|
+
return rules.ok
|
|
114
|
+
? { ok: true, value: [{ basePath: baseDir, rules: rules.value }] }
|
|
115
|
+
: rules;
|
|
116
|
+
}
|
|
103
117
|
if (!Array.isArray(raw))
|
|
104
|
-
return bad(`${where}
|
|
118
|
+
return bad(`${where} → "rules" must be { "<rule>": "<severity>" }, or a list of blocks like ESLint's flat config: [{ "files": [...], "rules": {...} }]`);
|
|
105
119
|
const out = [];
|
|
106
120
|
for (const [i, v] of raw.entries()) {
|
|
107
|
-
const b = parseBlock(v, `${where}
|
|
121
|
+
const b = parseBlock(v, `${where} → rules[${i}]`, { shipped, baseDir });
|
|
108
122
|
if (!b.ok)
|
|
109
123
|
return b;
|
|
110
124
|
out.push(b.value);
|
package/dist/rules-config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules-config.js","sourceRoot":"","sources":["../src/rules-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAkBxD,MAAM,UAAU,GAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"rules-config.js","sourceRoot":"","sources":["../src/rules-config.ts"],"names":[],"mappings":"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"}
|
package/dist/structure.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure.d.ts","sourceRoot":"","sources":["../src/structure.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"structure.d.ts","sourceRoot":"","sources":["../src/structure.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGpE,8EAA8E;AAC9E,KAAK,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAEvC;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;;;;CAK9B,CAAC;AAEF,gGAAgG;AAChG,wBAAgB,cAAc,CAC5B,SAAS,EAAE,eAAe,GAAG,KAAK,GAAG,SAAS,GAC7C,KAAK,GAAG,IAAI,CAGd;AAaD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,SAAS,EAAE,eAAe,GAAG,KAAK,GAAG,SAAS,EAE9C,EAAE,GAAmB,EAAE,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7C,gBAAgB,EAAE,CAyCpB;AAcD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM,CAO7E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GACpC,OAAO,EAAE,CAqBX"}
|
package/dist/structure.js
CHANGED
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
// eslint-disable-next-line boundaries/dependencies -- legacy I/O, moves behind a port in #76
|
|
25
25
|
import { readdirSync, existsSync } from "node:fs";
|
|
26
26
|
import { join, relative, basename, isAbsolute, sep } from "node:path";
|
|
27
|
+
import { CONFIG_FILE } from "../lib/paper-config.mjs";
|
|
27
28
|
/**
|
|
28
29
|
* The defaults are MEASURED against a live corpus of five paper directories, not picked by taste:
|
|
29
30
|
* under them it passes in full — zero findings. The counter-case was run too: `paper.pdf` added to
|
|
@@ -32,7 +33,7 @@ import { join, relative, basename, isAbsolute, sep } from "node:path";
|
|
|
32
33
|
* byte-compared by the `paper/stages` rule anyway.
|
|
33
34
|
*/
|
|
34
35
|
export const STRUCTURE_DEFAULTS = {
|
|
35
|
-
markers: ["PIPELINE-STATUS.md", "paper.tex", "paper.md",
|
|
36
|
+
markers: ["PIPELINE-STATUS.md", "paper.tex", "paper.md", CONFIG_FILE],
|
|
36
37
|
require: ["PIPELINE-STATUS.md"],
|
|
37
38
|
requireOneOf: [["paper.tex", "paper.md"]],
|
|
38
39
|
ignore: [],
|
|
@@ -107,7 +108,7 @@ export function checkStructure(paths, structure,
|
|
|
107
108
|
*/
|
|
108
109
|
function whyMissingMatters(file, dirName) {
|
|
109
110
|
if (file === "PIPELINE-STATUS.md")
|
|
110
|
-
return `\`paper/stages\`, \`paper/source\` and \`paper/
|
|
111
|
+
return `\`paper/stages\`, \`paper/source\` and \`paper/research-question\` read this file, so nothing \`${dirName}\` declares about its stages, sources or research question is checked`;
|
|
111
112
|
return `declared as required by your \`structure\` configuration`;
|
|
112
113
|
}
|
|
113
114
|
export function formatStructure(findings) {
|
package/dist/structure.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../src/structure.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,6FAA6F;AAC7F,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../src/structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,14 +15,63 @@ export interface PaperRequirements {
|
|
|
15
15
|
export declare const BASE_PROFILE = "tex-base.jsonc";
|
|
16
16
|
export declare const SCHEMA_FILE = "venue-profile.schema.json";
|
|
17
17
|
export declare const NO_REQUIREMENTS: TexRequirements;
|
|
18
|
+
/** One kind of paper a venue takes (`short`, `research`, …) and its page limits; null = not limited. */
|
|
19
|
+
export interface KindLimits {
|
|
20
|
+
readonly bodyPagesMax: number | null;
|
|
21
|
+
readonly refPagesMax: number | null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The format a venue's call for papers sets — what the `pdf/*` venue rules judge a built PDF
|
|
25
|
+
* against. Every field the profile leaves out is null, and a rule that finds null checks nothing:
|
|
26
|
+
* a profile that does not name a number never makes one up.
|
|
27
|
+
*/
|
|
28
|
+
export interface VenueFormat {
|
|
29
|
+
readonly pageWidthIn: number | null;
|
|
30
|
+
readonly pageHeightIn: number | null;
|
|
31
|
+
readonly columns: number | null;
|
|
32
|
+
readonly bodyPt: number | null;
|
|
33
|
+
readonly bodyPtTol: number | null;
|
|
34
|
+
readonly refPtMin: number | null;
|
|
35
|
+
readonly refPtMax: number | null;
|
|
36
|
+
/** The prefix a font name of the body text starts with (`LinLibertine`). */
|
|
37
|
+
readonly fontsText: string | null;
|
|
38
|
+
readonly fontsTitle: string | null;
|
|
39
|
+
readonly kinds: ReadonlyMap<string, KindLimits>;
|
|
40
|
+
}
|
|
41
|
+
/** Every format field a preset left out is null; a merge fills it from the parent. */
|
|
42
|
+
export declare const NO_FORMAT: VenueFormat;
|
|
43
|
+
/**
|
|
44
|
+
* One preset FILE, parsed — before its `extends` chain is resolved (`src/presets.ts` does that).
|
|
45
|
+
* A preset is a venue or a template family: `{ extends?, name?, template?, format?, tex?, rules? }`.
|
|
46
|
+
*/
|
|
47
|
+
export interface PresetFile {
|
|
48
|
+
/** The preset this one builds on: `paperlint:<name>` or a relative path. */
|
|
49
|
+
readonly extends: string | null;
|
|
50
|
+
/** A display name for messages; the file name otherwise. */
|
|
51
|
+
readonly name: string | null;
|
|
52
|
+
readonly template: string | null;
|
|
53
|
+
/** Null when the file declares no `tex` block (allowed only with `extends`). */
|
|
54
|
+
readonly tex: TexRequirements | null;
|
|
55
|
+
readonly format: VenueFormat;
|
|
56
|
+
/** rule id → ESLint entry, checked against the shipped rules where a config is built. */
|
|
57
|
+
readonly rules: Readonly<Record<string, unknown>>;
|
|
58
|
+
}
|
|
18
59
|
/**
|
|
19
|
-
* The text of one
|
|
60
|
+
* The text of one preset file → the typed file, or an Error naming every problem. The ONE parser
|
|
61
|
+
* of a preset: the toolchain reads its `tex`, the venue rules its `format`, the config its `rules`.
|
|
20
62
|
*
|
|
21
63
|
* @param text the file's contents
|
|
22
64
|
* @param file the name to put in messages
|
|
23
65
|
* @param dir the directory holding the schema (the shipped venues directory by default)
|
|
24
66
|
*/
|
|
67
|
+
export declare function parsePreset(text: string, file: string, dir?: string): PresetFile;
|
|
68
|
+
/** The text of one preset → the TeX requirements it declares itself (none without a `tex` block). */
|
|
25
69
|
export declare function parseProfile(text: string, file: string, dir?: string): TexRequirements;
|
|
70
|
+
/**
|
|
71
|
+
* The file a venue's profile lives in, or null when the name cannot be a venue (the base set is a
|
|
72
|
+
* profile file but not a venue). Whether the file exists is the caller's question.
|
|
73
|
+
*/
|
|
74
|
+
export declare function profileFileOf(venue: string): string | null;
|
|
26
75
|
/** The venues that have a profile — every `.jsonc` in the directory except the base set. */
|
|
27
76
|
export declare function venueNames(dir?: string): string[];
|
|
28
77
|
/** The union of two sets of requirements; a package declared by both keeps every proof of both. */
|
|
@@ -30,13 +79,20 @@ export declare function mergeRequirements(a: TexRequirements, b: TexRequirements
|
|
|
30
79
|
/** Every package name, packages and tools together, sorted — what tlmgr is asked for. */
|
|
31
80
|
export declare function packageNames(tex: TexRequirements): string[];
|
|
32
81
|
/**
|
|
33
|
-
* What ONE paper needs: the base set plus its venue's
|
|
34
|
-
*
|
|
35
|
-
* without
|
|
82
|
+
* What ONE paper needs: the base set plus its venue preset's `tex` (the union over the preset's
|
|
83
|
+
* `extends` chain, resolved by `src/presets.ts`). A paper with no preset gets the base set, and the
|
|
84
|
+
* source says so, so an ACM paper built without a preset is visibly running on the base set.
|
|
85
|
+
*/
|
|
86
|
+
export declare function requirementsFor(preset: {
|
|
87
|
+
readonly label: string;
|
|
88
|
+
readonly tex: TexRequirements;
|
|
89
|
+
} | null, dir?: string): PaperRequirements;
|
|
90
|
+
/**
|
|
91
|
+
* Everything any shipped preset declares, plus `extra` — the resolved presets of the project's own
|
|
92
|
+
* papers, which may live outside the package. The set `paperlint toolchain` installs, so one tree
|
|
93
|
+
* builds any paper.
|
|
36
94
|
*/
|
|
37
|
-
export declare function
|
|
38
|
-
/** Everything any profile declares — the set `paperlint toolchain` installs, so one tree builds any paper. */
|
|
39
|
-
export declare function declaredUnion(dir?: string): {
|
|
95
|
+
export declare function declaredUnion(dir?: string, extra?: readonly TexRequirements[]): {
|
|
40
96
|
readonly tex: TexRequirements;
|
|
41
97
|
readonly profiles: number;
|
|
42
98
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tex-requirements.d.ts","sourceRoot":"","sources":["../src/tex-requirements.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tex-requirements.d.ts","sourceRoot":"","sources":["../src/tex-requirements.ts"],"names":[],"mappings":"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"}
|
package/dist/tex-requirements.js
CHANGED
|
@@ -20,12 +20,13 @@
|
|
|
20
20
|
* allowed to know where this package is installed (rule 10).
|
|
21
21
|
*/
|
|
22
22
|
// eslint-disable-next-line boundaries/dependencies -- legacy I/O, moves behind a port in #76
|
|
23
|
-
import {
|
|
23
|
+
import { readFileSync, readdirSync } from "node:fs";
|
|
24
24
|
import { createRequire } from "node:module";
|
|
25
25
|
import { join } from "node:path";
|
|
26
26
|
// eslint-disable-next-line boundaries/dependencies -- legacy layer, moves behind a port in #76
|
|
27
27
|
import Ajv from "ajv";
|
|
28
28
|
import { packageVenuesDir } from "../skills/paper-pipeline/scripts/consumer.mjs";
|
|
29
|
+
import { CONFIG_FILE } from "../lib/paper-config.mjs";
|
|
29
30
|
/** The profile every paper gets, and the only one a paper with an unknown venue gets. */
|
|
30
31
|
export const BASE_PROFILE = "tex-base.jsonc";
|
|
31
32
|
export const SCHEMA_FILE = "venue-profile.schema.json";
|
|
@@ -51,22 +52,85 @@ function validatorFor(dir) {
|
|
|
51
52
|
function violations(file, v) {
|
|
52
53
|
return (v.errors ?? []).map((e) => `${file}: ${e.dataPath || "(top level)"} ${e.message ?? ""}`);
|
|
53
54
|
}
|
|
55
|
+
/** Every format field a preset left out is null; a merge fills it from the parent. */
|
|
56
|
+
export const NO_FORMAT = {
|
|
57
|
+
pageWidthIn: null,
|
|
58
|
+
pageHeightIn: null,
|
|
59
|
+
columns: null,
|
|
60
|
+
bodyPt: null,
|
|
61
|
+
bodyPtTol: null,
|
|
62
|
+
refPtMin: null,
|
|
63
|
+
refPtMax: null,
|
|
64
|
+
fontsText: null,
|
|
65
|
+
fontsTitle: null,
|
|
66
|
+
kinds: new Map(),
|
|
67
|
+
};
|
|
68
|
+
/** An optional field as the typed preset holds it: absent is null. */
|
|
69
|
+
const orNull = (v) => (v === undefined ? null : v);
|
|
70
|
+
function kindsOf(k) {
|
|
71
|
+
return new Map(Object.entries(k ?? {}).map(([name, v]) => [
|
|
72
|
+
name,
|
|
73
|
+
{
|
|
74
|
+
bodyPagesMax: orNull(v.body_pages_max),
|
|
75
|
+
refPagesMax: orNull(v.ref_pages_max),
|
|
76
|
+
},
|
|
77
|
+
]));
|
|
78
|
+
}
|
|
79
|
+
function formatOf(j = {}) {
|
|
80
|
+
return {
|
|
81
|
+
pageWidthIn: orNull(j.page_w_in),
|
|
82
|
+
pageHeightIn: orNull(j.page_h_in),
|
|
83
|
+
columns: orNull(j.columns),
|
|
84
|
+
bodyPt: orNull(j.body_pt),
|
|
85
|
+
bodyPtTol: orNull(j.body_pt_tol),
|
|
86
|
+
refPtMin: orNull(j.ref_pt_min),
|
|
87
|
+
refPtMax: orNull(j.ref_pt_max),
|
|
88
|
+
fontsText: orNull(j.fonts_text),
|
|
89
|
+
fontsTitle: orNull(j.fonts_title),
|
|
90
|
+
kinds: kindsOf(j.kinds),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
54
93
|
/**
|
|
55
|
-
* The text of one
|
|
94
|
+
* The text of one preset file → the typed file, or an Error naming every problem. The ONE parser
|
|
95
|
+
* of a preset: the toolchain reads its `tex`, the venue rules its `format`, the config its `rules`.
|
|
56
96
|
*
|
|
57
97
|
* @param text the file's contents
|
|
58
98
|
* @param file the name to put in messages
|
|
59
99
|
* @param dir the directory holding the schema (the shipped venues directory by default)
|
|
60
100
|
*/
|
|
61
|
-
export function
|
|
101
|
+
export function parsePreset(text, file, dir = packageVenuesDir()) {
|
|
62
102
|
const { config, error } = typescript().parseConfigFileTextToJson(file, text);
|
|
63
103
|
if (error)
|
|
64
104
|
throw new Error(`${file}: not valid JSONC — ${typescript().flattenDiagnosticMessageText(error.messageText, " ")}`);
|
|
65
105
|
const validate = validatorFor(dir);
|
|
66
106
|
if (!validate(config))
|
|
67
107
|
throw new Error(`${file} does not match ${SCHEMA_FILE}:\n ${violations(file, validate).join("\n ")}`);
|
|
68
|
-
const
|
|
69
|
-
return {
|
|
108
|
+
const j = config;
|
|
109
|
+
return {
|
|
110
|
+
extends: orNull(j.extends),
|
|
111
|
+
name: orNull(j.name),
|
|
112
|
+
template: orNull(j.template),
|
|
113
|
+
tex: j.tex
|
|
114
|
+
? { packages: j.tex.packages ?? {}, tools: j.tex.tools ?? {} }
|
|
115
|
+
: null,
|
|
116
|
+
format: formatOf(j.format),
|
|
117
|
+
rules: j.rules ?? {},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/** The text of one preset → the TeX requirements it declares itself (none without a `tex` block). */
|
|
121
|
+
export function parseProfile(text, file, dir = packageVenuesDir()) {
|
|
122
|
+
return parsePreset(text, file, dir).tex ?? NO_REQUIREMENTS;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* The file a venue's profile lives in, or null when the name cannot be a venue (the base set is a
|
|
126
|
+
* profile file but not a venue). Whether the file exists is the caller's question.
|
|
127
|
+
*/
|
|
128
|
+
export function profileFileOf(venue) {
|
|
129
|
+
return venue === BASE_PROFILE.slice(0, -PROFILE_EXT.length) ||
|
|
130
|
+
venue.includes("/") ||
|
|
131
|
+
venue.includes("\\")
|
|
132
|
+
? null
|
|
133
|
+
: `${venue}${PROFILE_EXT}`;
|
|
70
134
|
}
|
|
71
135
|
function readProfile(dir, file) {
|
|
72
136
|
return parseProfile(readFileSync(join(dir, file), "utf8"), file, dir);
|
|
@@ -98,30 +162,33 @@ export function packageNames(tex) {
|
|
|
98
162
|
].sort();
|
|
99
163
|
}
|
|
100
164
|
/**
|
|
101
|
-
* What ONE paper needs: the base set plus its venue's
|
|
102
|
-
*
|
|
103
|
-
* without
|
|
165
|
+
* What ONE paper needs: the base set plus its venue preset's `tex` (the union over the preset's
|
|
166
|
+
* `extends` chain, resolved by `src/presets.ts`). A paper with no preset gets the base set, and the
|
|
167
|
+
* source says so, so an ACM paper built without a preset is visibly running on the base set.
|
|
104
168
|
*/
|
|
105
|
-
export function requirementsFor(
|
|
169
|
+
export function requirementsFor(preset, dir = packageVenuesDir()) {
|
|
106
170
|
const base = readProfile(dir, BASE_PROFILE);
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (venue === BASE_PROFILE.slice(0, -PROFILE_EXT.length) ||
|
|
111
|
-
!existsSync(join(dir, file)))
|
|
112
|
-
return {
|
|
113
|
-
source: `the base set (venue ${venue} has no profile in paperlint)`,
|
|
171
|
+
return preset === null
|
|
172
|
+
? {
|
|
173
|
+
source: `the base set (no venue preset in ${CONFIG_FILE})`,
|
|
114
174
|
tex: base,
|
|
175
|
+
}
|
|
176
|
+
: {
|
|
177
|
+
source: `venue ${preset.label}`,
|
|
178
|
+
tex: mergeRequirements(base, preset.tex),
|
|
115
179
|
};
|
|
116
|
-
return {
|
|
117
|
-
source: `venue ${venue}`,
|
|
118
|
-
tex: mergeRequirements(base, readProfile(dir, file)),
|
|
119
|
-
};
|
|
120
180
|
}
|
|
121
|
-
/**
|
|
122
|
-
|
|
181
|
+
/**
|
|
182
|
+
* Everything any shipped preset declares, plus `extra` — the resolved presets of the project's own
|
|
183
|
+
* papers, which may live outside the package. The set `paperlint toolchain` installs, so one tree
|
|
184
|
+
* builds any paper.
|
|
185
|
+
*/
|
|
186
|
+
export function declaredUnion(dir = packageVenuesDir(), extra = []) {
|
|
123
187
|
const venues = venueNames(dir);
|
|
124
|
-
const
|
|
125
|
-
return {
|
|
188
|
+
const shipped = venues.reduce((acc, v) => mergeRequirements(acc, readProfile(dir, `${v}${PROFILE_EXT}`)), readProfile(dir, BASE_PROFILE));
|
|
189
|
+
return {
|
|
190
|
+
tex: extra.reduce(mergeRequirements, shipped),
|
|
191
|
+
profiles: venues.length + 1,
|
|
192
|
+
};
|
|
126
193
|
}
|
|
127
194
|
//# sourceMappingURL=tex-requirements.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tex-requirements.js","sourceRoot":"","sources":["../src/tex-requirements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,6FAA6F;AAC7F,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tex-requirements.js","sourceRoot":"","sources":["../src/tex-requirements.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -3,31 +3,27 @@ import type { RuleBlock } from "./rules-config.ts";
|
|
|
3
3
|
* The shapes the CLI commands exchange. Before the move to TypeScript this was all `{}` and lived
|
|
4
4
|
* in someone's head: a typo in a config key read as "field not set", not as an error.
|
|
5
5
|
*/
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* The project's settings — the root `paperlint.json`, optional. Every key is optional; the key list
|
|
8
|
+
* (and which keys a paper's own `paperlint.json` may also hold) is `SETTINGS_KEYS` in
|
|
9
|
+
* lib/paper-config.mjs.
|
|
10
|
+
*/
|
|
7
11
|
export interface PaperlintConfig {
|
|
8
|
-
/**
|
|
12
|
+
/** The paper director(ies), relative to the project root. Default `papers`. The field name is
|
|
9
13
|
* `PAPERS_DIR_FIELD` in lib/paper-config.mjs; code reads it through `papersDirOf()` in cli.ts. */
|
|
10
14
|
papersDir?: string | string[];
|
|
11
|
-
/** The command that prints the author list from .bib — each corpus has its own. */
|
|
12
|
-
authorListCommand?: string;
|
|
13
|
-
/** Per-paper typography debt: how many findings already exist; the number may only go down. */
|
|
14
|
-
typographyDebt?: Record<string, Record<string, number>>;
|
|
15
|
-
/** Frontmatter fields required for review notes, and the permitted values of each. */
|
|
16
|
-
docFields?: Record<string, {
|
|
17
|
-
values: string[];
|
|
18
|
-
}>;
|
|
19
|
-
/** Ignore review findings older than this date. */
|
|
20
|
-
reviewSince?: string;
|
|
21
|
-
/** How many findings a cold read must produce to count as a cold read. */
|
|
22
|
-
minFindings?: number;
|
|
23
|
-
/** The word with which review notes introduce the cause. */
|
|
24
|
-
causeMarker?: string;
|
|
25
15
|
/** Which files a paper directory must carry; `false` turns the check off entirely. */
|
|
26
16
|
structure?: StructureConfig | false;
|
|
27
|
-
/** REMOVED — `paperlint build` compiles the paper itself. Still typed so a leftover key can be named. */
|
|
28
|
-
buildScripts?: unknown;
|
|
29
17
|
/** ESLint config blocks appended after paperlint's own — PARSED by `parseSettings` in cli.ts. */
|
|
30
18
|
rules?: readonly RuleBlock[];
|
|
19
|
+
/** The default venue preset of every paper that names none (`src/paper-settings.ts`). */
|
|
20
|
+
extends?: string | null;
|
|
21
|
+
/** The default kind of paper. */
|
|
22
|
+
kind?: string;
|
|
23
|
+
/** The default path of the built PDF, relative to each paper. */
|
|
24
|
+
pdf?: string;
|
|
25
|
+
/** A note for humans; ignored. */
|
|
26
|
+
$comment?: unknown;
|
|
31
27
|
}
|
|
32
28
|
export interface StructureConfig {
|
|
33
29
|
/** These files are what IDENTIFY a directory as a paper. Detection is generous. */
|
|
@@ -45,6 +41,8 @@ export interface Args {
|
|
|
45
41
|
paths: string[];
|
|
46
42
|
config: string | null;
|
|
47
43
|
json: boolean;
|
|
44
|
+
/** `--fix`: `lint` writes every fix a rule offers, then reports what is left. */
|
|
45
|
+
fix: boolean;
|
|
48
46
|
all: boolean;
|
|
49
47
|
dryRun: boolean;
|
|
50
48
|
/** `--check`: `toolchain` reports what is missing and changes nothing. */
|
|
@@ -100,11 +98,15 @@ export interface BuildResult {
|
|
|
100
98
|
/** The result of reading the config: either data, or the exit code the caller exits with. */
|
|
101
99
|
export type ConfigRead = {
|
|
102
100
|
opts: PaperlintConfig;
|
|
101
|
+
/** The root `paperlint.json`, or null when the project has none. */
|
|
103
102
|
configPath: string | null;
|
|
103
|
+
/** The project root: `papersDir` and the `rules` globs are relative to it. */
|
|
104
|
+
root: string;
|
|
104
105
|
code?: undefined;
|
|
105
106
|
} | {
|
|
106
107
|
code: number;
|
|
107
108
|
opts?: undefined;
|
|
108
109
|
configPath?: undefined;
|
|
110
|
+
root?: undefined;
|
|
109
111
|
};
|
|
110
112
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;GAGG;AAEH
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|