diff --git a/.lintstagedrc.json b/.lintstagedrc.json
index c43f5f89fe..863473f2ad 100644
--- a/.lintstagedrc.json
+++ b/.lintstagedrc.json
@@ -1,3 +1,4 @@
{
- "!(docs/**/*)*.{ts,js,json,html,md,mts}": ["eslint --fix", "prettier --write"]
+ "!(docs/**/*)*.{ts,js,json,html,md,mts}": ["eslint --fix", "prettier --write"],
+ "cSpell.json": ["ts-node-esm scripts/fixCSpell.ts"]
}
diff --git a/cSpell.json b/cSpell.json
index 0d9ed77a1e..a8c28dc3e4 100644
--- a/cSpell.json
+++ b/cSpell.json
@@ -2,91 +2,85 @@
"version": "0.2",
"language": "en",
"words": [
- "blockquotes",
+ "acyclicer",
+ "adamiecki",
+ "alois",
+ "antiscript",
+ "applitools",
+ "asciidoctor",
+ "ashish",
+ "astah",
+ "bbox",
+ "bilkent",
+ "bisheng",
+ "brolin",
+ "codedoc",
+ "colour",
+ "cpettitt",
"customizability",
- "Gantt",
+ "cuzon",
+ "cytoscape",
+ "dagre",
+ "descr",
+ "docsify",
+ "docsy",
+ "doku",
+ "dompurify",
+ "edgechromium",
+ "faber",
+ "flatmap",
+ "gantt",
+ "gitea",
+ "gitgraph",
+ "graphlib",
+ "grav",
+ "greywolf",
+ "inkdrop",
+ "jaoude",
"jison",
- "mermaid",
- "mindmap",
- "Mindmaps",
- "mitigations",
- "sandboxed",
- "shiki",
- "verdana",
- "Visio"
- ],
- "ignoreWords": [
- "Alois",
- "Klink",
+ "kaufmann",
+ "klemm",
+ "klink",
"knsv",
- "Knut",
- "Matthieu",
- "Sidharth",
- "Sveidqvist",
- "Vinod",
- "Faber",
- "Orlandoni",
- "Klemm",
- "Mindaugas",
- "Laganeckas",
- "Cuzon",
- "Yash",
- "Adamiecki",
- "applitools",
- "Asciidoctor",
- "Astah",
- "Bisheng",
- "codedoc",
- "Docsy",
- "Doku",
- "Gitea",
- "Gitgraph",
- "Grav",
- "Inkdrop",
- "Jaoude",
+ "knut",
+ "laganeckas",
+ "lucida",
+ "matthieu",
"mdbook",
"mermerd",
+ "mindaugas",
+ "mindmap",
+ "mindmaps",
+ "mitigations",
"mkdocs",
+ "orlandoni",
"phpbb",
- "Plantuml",
- "Playfair's",
- "Podlite",
+ "plantuml",
+ "playfair",
+ "podlite",
+ "ranksep",
"redmine",
+ "sandboxed",
+ "setupgraphviewbox",
+ "shiki",
+ "sidharth",
"sphinxcontrib",
- "Tuleap",
- "dagre",
- "vitepress",
- "docsify",
- "colour",
- "graphlib",
- "acyclicer",
- "ranksep",
- "descr",
+ "statediagram",
"substate",
- "Ashish",
- "bbox",
+ "sveidqvist",
"techn",
- "cytoscape",
- "Lucida",
- "Bilkent",
- "cpettitt",
- "antiscript",
"ts-nocheck",
- "setupGraphViewbox",
- "flatmap",
- "Kaufmann",
+ "tuleap",
+ "verdana",
"viewports",
- "edgechromium",
- "statediagram",
- "Brolin",
- "Greywolf"
+ "vinod",
+ "visio",
+ "vitepress",
+ "xlink",
+ "yash"
],
"patterns": [
- {
- "name": "Markdown links",
- "pattern": "\\((.*)\\)",
- "description": ""
- },
+ { "name": "Markdown links", "pattern": "\\((.*)\\)", "description": "" },
{
"name": "Markdown code blocks",
"pattern": "/^(\\s*`{3,}).*[\\s\\S]*?^\\1/gmx",
@@ -97,25 +91,14 @@
"pattern": "\\`([^\\`\\r\\n]+?)\\`",
"description": "https://stackoverflow.com/questions/41274241/how-to-capture-inline-markdown-code-but-not-a-markdown-code-fence-with-regex"
},
- {
- "name": "Link contents",
- "pattern": "\\",
- "description": ""
- },
- {
- "name": "Snippet references",
- "pattern": "-- snippet:(.*)",
- "description": ""
- },
+ { "name": "Link contents", "pattern": "\\", "description": "" },
+ { "name": "Snippet references", "pattern": "-- snippet:(.*)", "description": "" },
{
"name": "Snippet references 2",
"pattern": "\\<\\[sample:(.*)",
"description": "another kind of snippet reference"
},
- {
- "name": "Multi-line code blocks",
- "pattern": "/^\\s*```[\\s\\S]*?^\\s*```/gm"
- },
+ { "name": "Multi-line code blocks", "pattern": "/^\\s*```[\\s\\S]*?^\\s*```/gm" },
{
"name": "HTML Tags",
"pattern": "<[^>]*>",
diff --git a/package.json b/package.json
index 15bfcbada6..0881fa3f2e 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,7 @@
"dev": "concurrently \"pnpm build:vite --watch\" \"ts-node-esm .vite/server.ts\"",
"release": "pnpm build",
"lint": "eslint --cache --ignore-path .gitignore . && pnpm --filter mermaid run lint:jison && prettier --check .",
- "lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write .",
+ "lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write . && ts-node-esm scripts/fixCSpell.ts",
"cypress": "cypress run",
"cypress:open": "cypress open",
"e2e": "start-server-and-test dev http://localhost:9000/ cypress",
diff --git a/packages/mermaid/src/docs.mts b/packages/mermaid/src/docs.mts
index 96f5e9024c..5d7175a866 100644
--- a/packages/mermaid/src/docs.mts
+++ b/packages/mermaid/src/docs.mts
@@ -61,14 +61,7 @@ const LOGMSG_COPIED = `, and copied to ${FINAL_DOCS_DIR}`;
const WARN_DOCSDIR_DOESNT_MATCH = `Changed files were transformed in ${SOURCE_DOCS_DIR} but do not match the files in ${FINAL_DOCS_DIR}. Please run 'pnpm --filter mermaid run docs:build' after making changes to ${SOURCE_DOCS_DIR} to update the ${FINAL_DOCS_DIR} directory with the transformed files.`;
-// TODO: Read from .prettierrc?
-const prettierConfig: prettier.Config = {
- useTabs: false,
- tabWidth: 2,
- endOfLine: 'auto',
- printWidth: 100,
- singleQuote: true,
-};
+const prettierConfig = prettier.resolveConfig.sync('.') ?? {};
let filesWereTransformed = false;
diff --git a/scripts/fixCSpell.ts b/scripts/fixCSpell.ts
new file mode 100644
index 0000000000..1d15e21940
--- /dev/null
+++ b/scripts/fixCSpell.ts
@@ -0,0 +1,24 @@
+/**
+ * Sorts all the `words` in the cSpell.json file.
+ *
+ * Run from the same folder as the `cSpell.json` file
+ * (i.e. the root of the Mermaid project).
+ */
+
+import { readFileSync, writeFileSync } from 'node:fs';
+import prettier from 'prettier';
+
+const filepath = './cSpell.json';
+const cSpell: { words: string[] } = JSON.parse(readFileSync(filepath, 'utf8'));
+
+cSpell.words = [...new Set(cSpell.words.map((word) => word.toLowerCase()))];
+cSpell.words.sort((a, b) => a.localeCompare(b));
+
+const prettierConfig = prettier.resolveConfig.sync(filepath) ?? {};
+writeFileSync(
+ filepath,
+ prettier.format(JSON.stringify(cSpell), {
+ ...prettierConfig,
+ filepath,
+ })
+);