taste-lint 0.2.0 → 0.4.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 +5 -3
- package/data/config.schema.json +7 -0
- package/data/corpus/copywriting.jsonl +4 -4
- package/data/rule-drafts/interaction/interaction-layout-shift.yaml +3 -3
- package/data/rules/copywriting/copywriting-anthropomorphism.yaml +4 -3
- package/data/rules/copywriting/copywriting-antithesis-contrast.yaml +43 -0
- package/data/rules/copywriting/copywriting-antithesis-frame.yaml +23 -0
- package/data/rules/copywriting/copywriting-artificial-balance.yaml +4 -1
- package/data/rules/copywriting/copywriting-boilerplate-offer.yaml +1 -1
- package/data/rules/copywriting/copywriting-canned-phrasing.yaml +1 -1
- package/data/rules/copywriting/copywriting-claim-without-evidence.yaml +10 -1
- package/data/rules/copywriting/copywriting-click-here-links.yaml +4 -3
- package/data/rules/copywriting/copywriting-conditions-first.yaml +2 -2
- package/data/rules/copywriting/copywriting-copula-avoidance.yaml +21 -0
- package/data/rules/copywriting/copywriting-dead-link.yaml +28 -0
- package/data/rules/copywriting/copywriting-em-dash-in-ui.yaml +23 -0
- package/data/rules/copywriting/copywriting-error-descriptions.yaml +2 -2
- package/data/rules/copywriting/copywriting-excessive-hedging.yaml +1 -1
- package/data/rules/copywriting/copywriting-external-arrow-internal-link.yaml +26 -0
- package/data/rules/copywriting/copywriting-fabricated-specificity.yaml +6 -3
- package/data/rules/copywriting/copywriting-filler-words.yaml +4 -3
- package/data/rules/copywriting/copywriting-generic-framing.yaml +12 -6
- package/data/rules/copywriting/copywriting-generic-language.yaml +12 -4
- package/data/rules/copywriting/copywriting-generic-validation.yaml +1 -1
- package/data/rules/copywriting/copywriting-latinisms.yaml +6 -4
- package/data/rules/copywriting/copywriting-machine-prose.yaml +4 -1
- package/data/rules/copywriting/copywriting-mechanism-over-outcome.yaml +4 -1
- package/data/rules/copywriting/copywriting-meta-commentary.yaml +1 -1
- package/data/rules/copywriting/copywriting-missing-reasoning-link.yaml +4 -1
- package/data/rules/copywriting/copywriting-nominalisations.yaml +4 -3
- package/data/rules/copywriting/copywriting-over-explanation.yaml +4 -1
- package/data/rules/copywriting/copywriting-participle-tail.yaml +21 -0
- package/data/rules/copywriting/copywriting-passive-voice.yaml +4 -3
- package/data/rules/copywriting/copywriting-promotional-docs-voice.yaml +4 -3
- package/data/rules/copywriting/copywriting-prompt-restatement.yaml +5 -2
- package/data/rules/copywriting/copywriting-punctuation-tics.yaml +4 -1
- package/data/rules/copywriting/copywriting-reader-first.yaml +4 -1
- package/data/rules/copywriting/copywriting-repetitive-transitions.yaml +1 -1
- package/data/rules/copywriting/copywriting-requirements-language.yaml +2 -2
- package/data/rules/copywriting/copywriting-searchable-headings.yaml +2 -2
- package/data/rules/copywriting/copywriting-semantic-links.yaml +2 -2
- package/data/rules/copywriting/copywriting-slogan-headings.yaml +27 -0
- package/data/rules/copywriting/copywriting-structural-symmetry.yaml +4 -1
- package/data/rules/copywriting/copywriting-tee-up.yaml +23 -0
- package/data/rules/copywriting/copywriting-temporal-words.yaml +4 -3
- package/data/rules/copywriting/copywriting-unexplained-action.yaml +5 -2
- package/data/rules/copywriting/copywriting-unnatural-polish.yaml +8 -5
- package/data/rules/copywriting/copywriting-unverifiable-proof.yaml +1 -1
- package/data/rules/copywriting/copywriting-vague-error.yaml +2 -0
- package/data/rules/craft/craft-atmosphere-gradient.yaml +28 -0
- package/data/rules/craft/craft-decoration-no-role.yaml +2 -1
- package/data/rules/craft/craft-decorative-ordinals.yaml +26 -0
- package/data/rules/craft/craft-default-indigo.yaml +28 -0
- package/data/rules/craft/craft-faux-product-chrome.yaml +4 -1
- package/data/rules/motion/motion-will-change-misuse.yaml +28 -0
- package/data/rules/product/product-nested-modals.yaml +1 -1
- package/data/rules/product/product-select-for-few-options.yaml +1 -1
- package/data/rules/schema/rule.schema.json +7 -1
- package/dist/cli.js +748 -131
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +38 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +459 -51
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/data/rules/copywriting/copywriting-idea-repetition.yaml +0 -34
package/dist/index.d.ts
CHANGED
|
@@ -68,7 +68,7 @@ declare const DOC_TYPES: readonly ["tutorial", "howto", "reference", "explanatio
|
|
|
68
68
|
type DocType = (typeof DOC_TYPES)[number];
|
|
69
69
|
declare const ROLES: readonly ["heading", "body", "list-item", "cell", "button", "link", "label", "placeholder", "aria", "literal-copy", "caption", "unknown"];
|
|
70
70
|
type Role = (typeof ROLES)[number];
|
|
71
|
-
declare const CONTEXT_KEYS: readonly ["section", "headingAbove", "docType", "element", "role", "neighbours"];
|
|
71
|
+
declare const CONTEXT_KEYS: readonly ["section", "headingAbove", "docType", "element", "role", "neighbours", "earlier", "brief"];
|
|
72
72
|
type ContextKey = (typeof CONTEXT_KEYS)[number];
|
|
73
73
|
type Band = "act" | "review" | "silent";
|
|
74
74
|
interface RuleSource {
|
|
@@ -116,6 +116,8 @@ interface Preconditions {
|
|
|
116
116
|
role?: Role[];
|
|
117
117
|
/** Skip Markdown units when the project curls quotes at build time. */
|
|
118
118
|
smartQuotesAtBuild?: false;
|
|
119
|
+
/** Skip units shorter than this many words: a label or a greeting is not prose. */
|
|
120
|
+
minWords?: number;
|
|
119
121
|
}
|
|
120
122
|
interface ReviewProcedure {
|
|
121
123
|
applicability: string;
|
|
@@ -186,6 +188,10 @@ interface UnitContext {
|
|
|
186
188
|
fontScale?: Record<string, string>;
|
|
187
189
|
section?: string;
|
|
188
190
|
headingAbove?: string;
|
|
191
|
+
/** Sentences said earlier in the file that share content words with this unit. */
|
|
192
|
+
earlier?: string;
|
|
193
|
+
/** What the product is and does, from `lint --brief`: the facts copy may state. */
|
|
194
|
+
brief?: string;
|
|
189
195
|
docType: DocType;
|
|
190
196
|
element?: string;
|
|
191
197
|
attr?: string;
|
|
@@ -408,6 +414,8 @@ interface CorpusItem {
|
|
|
408
414
|
labelSource: "manifest" | "manifest-weak" | "hand" | "sweep" | "ai";
|
|
409
415
|
labelModel?: string;
|
|
410
416
|
labelPromptHash?: string;
|
|
417
|
+
/** Why a hand labeller decided as they did; feeds rubric edits. */
|
|
418
|
+
note?: string;
|
|
411
419
|
source: {
|
|
412
420
|
repo: string;
|
|
413
421
|
path: string;
|
|
@@ -431,6 +439,8 @@ interface Config {
|
|
|
431
439
|
};
|
|
432
440
|
smartQuotesAtBuild: boolean;
|
|
433
441
|
exclude: string[];
|
|
442
|
+
/** Extra rule directories from the config, absolute. */
|
|
443
|
+
rules?: string[];
|
|
434
444
|
}
|
|
435
445
|
//#endregion
|
|
436
446
|
//#region src/scan/profiles.d.ts
|
|
@@ -438,7 +448,7 @@ declare const PROFILE_NAMES: readonly ["product", "writing", "instructions", "al
|
|
|
438
448
|
type ProfileName = (typeof PROFILE_NAMES)[number];
|
|
439
449
|
//#endregion
|
|
440
450
|
//#region src/lib/config.d.ts
|
|
441
|
-
declare const loadConfig: (root: string, defaults?: Config["docTypes"]) => Config;
|
|
451
|
+
export declare const loadConfig: (root: string, defaults?: Config["docTypes"]) => Config;
|
|
442
452
|
//#endregion
|
|
443
453
|
//#region src/lint.d.ts
|
|
444
454
|
/**
|
|
@@ -454,6 +464,8 @@ interface LintOptions {
|
|
|
454
464
|
profile?: ProfileName;
|
|
455
465
|
/** Report only findings on lines changed since this Git revision. */
|
|
456
466
|
since?: string;
|
|
467
|
+
/** File stating what the product is and does; rules that compare copy against it read it. */
|
|
468
|
+
brief?: string;
|
|
457
469
|
/** Rules directory. Default: the packaged `data/rules`. */
|
|
458
470
|
rulesDir?: string;
|
|
459
471
|
/** Rule ids to run; wins over `profile`. */
|
|
@@ -490,7 +502,7 @@ interface LintContext {
|
|
|
490
502
|
/** Called at most every request with counts and elapsed time. */
|
|
491
503
|
onProgress?: (progress: Progress) => void;
|
|
492
504
|
/** Called once with every unit, the Jev answers and the mechanical negatives, before findings are banded. */
|
|
493
|
-
onEvidence?: (units: Unit[], answers: Map<string, Record<string, number>>, negatives: Map<string, Set<string>>, rules: Rule[]) => void;
|
|
505
|
+
onEvidence?: (units: Unit[], answers: Map<string, Record<string, number>>, negatives: Map<string, Set<string>>, rules: Rule[], sources: Map<string, string[]>) => void;
|
|
494
506
|
}
|
|
495
507
|
/** What `runLint` resolves with: a report where the fields renderers treat as optional are always present. */
|
|
496
508
|
type LintRun = LintResult & Required<Pick<LintResult, "summary" | "ruleFindings" | "ruleScorecard" | "scope">> & {
|
|
@@ -498,17 +510,19 @@ type LintRun = LintResult & Required<Pick<LintResult, "summary" | "ruleFindings"
|
|
|
498
510
|
units: number;
|
|
499
511
|
manifest: Record<string, unknown>;
|
|
500
512
|
};
|
|
501
|
-
declare const runLint: (options?: LintOptions, ctx?: LintContext) => Promise<LintRun>;
|
|
513
|
+
export declare const runLint: (options?: LintOptions, ctx?: LintContext) => Promise<LintRun>;
|
|
502
514
|
//#endregion
|
|
503
515
|
//#region src/rules/load.d.ts
|
|
504
|
-
declare const resolveRulesDir: (explicit?: string) => string;
|
|
516
|
+
export declare const resolveRulesDir: (explicit?: string) => string;
|
|
505
517
|
interface LoadOptions {
|
|
506
518
|
/** Include rules with status draft (default false). */
|
|
507
519
|
allowDraft?: boolean;
|
|
508
520
|
/** Restrict to these rule ids. */
|
|
509
521
|
only?: string[];
|
|
522
|
+
/** More rule directories with the same domain-folder layout, such as a voice pack. */
|
|
523
|
+
extraDirs?: string[];
|
|
510
524
|
}
|
|
511
|
-
declare const loadRules: (rulesDir: string, options?: LoadOptions) => Rule[];
|
|
525
|
+
export declare const loadRules: (rulesDir: string, options?: LoadOptions) => Rule[];
|
|
512
526
|
//#endregion
|
|
513
527
|
//#region src/rules/taxonomy.d.ts
|
|
514
528
|
interface Category {
|
|
@@ -516,21 +530,21 @@ interface Category {
|
|
|
516
530
|
domain: Domain;
|
|
517
531
|
label: string;
|
|
518
532
|
}
|
|
519
|
-
declare const CATEGORIES: readonly Category[];
|
|
533
|
+
export declare const CATEGORIES: readonly Category[];
|
|
520
534
|
//#endregion
|
|
521
535
|
//#region src/extract/index.d.ts
|
|
522
|
-
declare const extractFile: (config: Config, relativeFile: string) => Unit[];
|
|
536
|
+
export declare const extractFile: (config: Config, relativeFile: string) => Unit[];
|
|
523
537
|
//#endregion
|
|
524
538
|
//#region src/extract/tsx.d.ts
|
|
525
539
|
interface TsxExtractOptions {
|
|
526
540
|
config: Config;
|
|
527
541
|
docType: DocType;
|
|
528
542
|
}
|
|
529
|
-
declare const extractTsx: (file: string, source: string, options: TsxExtractOptions) => Unit[];
|
|
543
|
+
export declare const extractTsx: (file: string, source: string, options: TsxExtractOptions) => Unit[];
|
|
530
544
|
//#endregion
|
|
531
545
|
//#region src/map/jev.d.ts
|
|
532
546
|
type Transport = "typesafe" | "gateway";
|
|
533
|
-
declare class ProviderError extends Error {
|
|
547
|
+
export declare class ProviderError extends Error {
|
|
534
548
|
readonly category: "provider_error" | "invalid_response" | "timeout" | "auth";
|
|
535
549
|
readonly status?: number | undefined;
|
|
536
550
|
constructor(category: "provider_error" | "invalid_response" | "timeout" | "auth", status?: number | undefined);
|
|
@@ -545,16 +559,16 @@ interface FetchEvaluateOptions {
|
|
|
545
559
|
/** Sleep hook so tests can run without waiting. */
|
|
546
560
|
sleep?: (ms: number) => Promise<void>;
|
|
547
561
|
}
|
|
548
|
-
declare const makeFetchEvaluate: (options: FetchEvaluateOptions) => Evaluate;
|
|
562
|
+
export declare const makeFetchEvaluate: (options: FetchEvaluateOptions) => Evaluate;
|
|
549
563
|
//#endregion
|
|
550
564
|
//#region src/report/json.d.ts
|
|
551
|
-
declare const renderJson: (result: LintResult, manifest: Record<string, unknown>) => string;
|
|
565
|
+
export declare const renderJson: (result: LintResult, manifest: Record<string, unknown>) => string;
|
|
552
566
|
//#endregion
|
|
553
567
|
//#region src/report/sarif.d.ts
|
|
554
|
-
declare const renderSarif: (result: Pick<LintResult, "findings" | "ruleFindings">, rules: Rule[], version: string) => string;
|
|
568
|
+
export declare const renderSarif: (result: Pick<LintResult, "findings" | "ruleFindings">, rules: Rule[], version: string) => string;
|
|
555
569
|
//#endregion
|
|
556
570
|
//#region src/report/tty.d.ts
|
|
557
|
-
declare const renderTty: (result: LintResult, options?: {
|
|
571
|
+
export declare const renderTty: (result: LintResult, options?: {
|
|
558
572
|
verbose?: boolean;
|
|
559
573
|
}) => string;
|
|
560
574
|
//#endregion
|
|
@@ -615,6 +629,10 @@ interface EvalOptions {
|
|
|
615
629
|
only?: string[];
|
|
616
630
|
split?: "dev" | "holdout" | "all";
|
|
617
631
|
includeWeak?: boolean;
|
|
632
|
+
/** Only items from these label sources; `hand` measures agreement with you. */
|
|
633
|
+
sources?: CorpusItem["labelSource"][];
|
|
634
|
+
/** List each item where the judge and the label disagree at the review threshold. */
|
|
635
|
+
disagreements?: boolean;
|
|
618
636
|
dryRun?: boolean;
|
|
619
637
|
noCache?: boolean;
|
|
620
638
|
resultsDir?: string;
|
|
@@ -660,10 +678,10 @@ interface EvalResult {
|
|
|
660
678
|
errors: number;
|
|
661
679
|
};
|
|
662
680
|
}
|
|
663
|
-
declare const runEval: (options: EvalOptions, ctx?: EvalContext) => Promise<EvalResult>;
|
|
681
|
+
export declare const runEval: (options: EvalOptions, ctx?: EvalContext) => Promise<EvalResult>;
|
|
664
682
|
//#endregion
|
|
665
683
|
//#region src/eval/corpus.d.ts
|
|
666
|
-
declare const splitFor: (id: string) => "dev" | "holdout";
|
|
684
|
+
export declare const splitFor: (id: string) => "dev" | "holdout";
|
|
667
685
|
//#endregion
|
|
668
686
|
//#region src/eval/promotion.d.ts
|
|
669
687
|
interface PromotionEvidence {
|
|
@@ -684,6 +702,8 @@ interface TuneOptions {
|
|
|
684
702
|
model?: string;
|
|
685
703
|
apiKey?: string;
|
|
686
704
|
minItems?: number;
|
|
705
|
+
/** Only items from these label sources, e.g. `hand`. */
|
|
706
|
+
sources?: CorpusItem["labelSource"][];
|
|
687
707
|
}
|
|
688
708
|
interface TuneContext {
|
|
689
709
|
evaluate?: Evaluate;
|
|
@@ -698,11 +718,11 @@ interface TuneDecision {
|
|
|
698
718
|
recall: number;
|
|
699
719
|
action: "keep" | "raise" | "lower" | "demote" | "insufficient";
|
|
700
720
|
}
|
|
701
|
-
declare const runTune: (options: TuneOptions, ctx?: TuneContext) => Promise<{
|
|
721
|
+
export declare const runTune: (options: TuneOptions, ctx?: TuneContext) => Promise<{
|
|
702
722
|
report: string;
|
|
703
723
|
exitCode: number;
|
|
704
724
|
decisions: TuneDecision[];
|
|
705
725
|
}>;
|
|
706
726
|
//#endregion
|
|
707
|
-
export {
|
|
727
|
+
export type { Band, CONTEXT_KEYS, Config, ContextKey, CorpusItem, Coverage, CriterionSide, DOC_TYPES, DOMAINS, DocType, Domain, EntryValue, Evaluate, Finding, Fix, LintContext, LintOptions, LintResult, LintRun, Mechanical, MechanicalHit, NeighbourSummary, Preconditions, Progress, Question, ROLES, RULE_STATUSES, RecorderHandle, ResolvedTypography, ReviewProcedure, Role, Rule, RuleSource, RuleStatus, RunStatus, RunSummary, SEVERITIES, SEVERITY_RANK, STRUCTURAL_KINDS, ScanScope, Scorecard, Severity, SystemOneNoul, SystemOneRequest, SystemOneResponse, TIERS, Thresholds, Tier, Tuning, TuningEntry, UNIT_KINDS, Unit, UnitContext, UnitKind, Unknown, Usage };
|
|
708
728
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/analysis/repository.ts","../src/types.ts","../src/scan/profiles.ts","../src/lib/config.ts","../src/lint.ts","../src/rules/load.ts","../src/rules/taxonomy.ts","../src/extract/index.ts","../src/extract/tsx.ts","../src/map/jev.ts","../src/report/json.ts","../src/report/sarif.ts","../src/report/tty.ts","../src/lib/stats.ts","../src/eval/coverage.ts","../src/eval/metrics.ts","../src/eval/corpus.ts","../src/eval/promotion.ts","../src/eval/tune.ts"],"mappings":";UAQiB;EACf;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;IAAa;MAAS;;IAAmB;MAAO;;;;UAGjC;EACf;EACA;EACA;;UAGe;EACf;IAAW;IAAgB;IAAsB;;EACjD,WAAW;EACX,UAAU;EACV;EACA,YAAY,KACV;;cAYS;WACF;mBACQ;EAEjB,YAAY;EAIZ,QAAQ,cAAc;EAStB,KAAK;EAkBL,OAAO;EAUP,SACE;IACG;IAAc,OAAO;;;;;cCtFf;KASD,iBAAiB;cAEhB;;;;;;cAaA,2BAA2B;KAC5B,mBAAmB;cAElB;KACD,eAAe;cAEd;KACD,mBAAmB;;cAElB,eAAe,OAAO;cAEtB;KACD,qBAAqB;cAEpB;KAcD,kBAAkB;cAEjB;KAcD,eAAe;cAEd;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/analysis/repository.ts","../src/types.ts","../src/scan/profiles.ts","../src/lib/config.ts","../src/lint.ts","../src/rules/load.ts","../src/rules/taxonomy.ts","../src/extract/index.ts","../src/extract/tsx.ts","../src/map/jev.ts","../src/report/json.ts","../src/report/sarif.ts","../src/report/tty.ts","../src/lib/stats.ts","../src/eval/coverage.ts","../src/eval/metrics.ts","../src/eval/corpus.ts","../src/eval/promotion.ts","../src/eval/tune.ts"],"mappings":"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"}
|