Skip to content

Commit 8e9b2c0

Browse files
Add a language definition for ddn CLI (#12)
Co-authored-by: Rob Dominguez <[email protected]>
1 parent 8f4c9b2 commit 8e9b2c0

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

src/theme/prism-include-languages.ts

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import siteConfig from '@generated/docusaurus.config';
2+
import type * as PrismNamespace from 'prismjs';
3+
import type { Optional } from 'utility-types';
4+
5+
export default function prismIncludeLanguages(PrismObject: typeof PrismNamespace): void {
6+
const {
7+
themeConfig: { prism },
8+
} = siteConfig;
9+
const { additionalLanguages } = prism as { additionalLanguages: string[] };
10+
11+
// Prism components work on the Prism instance on the window, while prism-
12+
// react-renderer uses its own Prism instance. We temporarily mount the
13+
// instance onto window, import components to enhance it, then remove it to
14+
// avoid polluting global namespace.
15+
// You can mutate PrismObject: registering plugins, deleting languages... As
16+
// long as you don't re-assign it
17+
globalThis.Prism = PrismObject;
18+
19+
additionalLanguages.forEach(lang => {
20+
if (lang === 'php') {
21+
// eslint-disable-next-line global-require
22+
require('prismjs/components/prism-markup-templating.js');
23+
}
24+
// eslint-disable-next-line global-require, import/no-dynamic-require
25+
require(`prismjs/components/prism-${lang}`);
26+
});
27+
28+
require('/static/prismjs/ddn.js');
29+
30+
delete (globalThis as Optional<typeof globalThis, 'Prism'>).Prism;
31+
}

static/prismjs/ddn.js

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
Prism.languages.ddn = {
2+
cli: {
3+
pattern: /\bddn\b/,
4+
alias: 'keyword',
5+
},
6+
flag: {
7+
pattern: /--?[\w-]+/,
8+
alias: 'attr-name',
9+
},
10+
// Specific argument types first
11+
path: {
12+
// Optional ./ ../ / prefix, segments with word chars/hyphens, optional extension
13+
pattern: /(?:\.\.?\/|\/)?(?:[\w-]+(?:\/[\w-]+)*)(?:\.\w+)?/,
14+
greedy: true, // Match longest path first
15+
alias: 'string',
16+
},
17+
'connector-type': {
18+
pattern: /\b\w+\/\w+\b/, // e.g., hasura/postgres
19+
alias: 'class-name',
20+
},
21+
'versioned-name': {
22+
// e.g., globals:c15b0b4031 or subgraph:version
23+
pattern: /\b[a-zA-Z_][\w-]*:[a-zA-Z0-9][\w-]*\b/,
24+
alias: 'namespace',
25+
},
26+
'key-value': {
27+
// e.g. key=value used in --env flag
28+
pattern: /\b\w+=\S+/,
29+
alias: 'property',
30+
},
31+
number: {
32+
pattern: /\b\d+\b/,
33+
alias: 'number',
34+
},
35+
// Subcommands before general arguments
36+
subcommand: {
37+
// List all known subcommand parts from filenames + common ones
38+
pattern:
39+
/\b(?:project|command|connector|connector-link|model|relationship|subgraph|supergraph|auth|codemod|completion|console|context|help|plugins|run|update-cli|version|init|add|list|remove|show|update|bash|fish|powershell|zsh|generate-promptql-secret-key|login|upgrade-context-v2-to-v3|upgrade-graphqlconfig-aggregate|upgrade-graphqlconfig-subscriptions|upgrade-model-v1-to-v2|upgrade-object-boolean-expression-types|upgrade-project-config-v2-to-v3|upgrade-supergraph-config-v1-to-v2|create-context|get-context|get-current-context|get|set-current-context|set|unset|doctor|build|delete|diff|local|set-self-hosted-engine-url|prune|apply|create|env|introspect|plugin|setenv|show-resources|add-resources|install|uninstall|upgrade|set-api-access-mode|logs)\b/,
40+
alias: 'function',
41+
},
42+
// General argument should be last
43+
argument: {
44+
pattern: /\b[a-zA-Z_][\w-]*\b/, // Allows leading underscore
45+
alias: 'variable',
46+
},
47+
};

0 commit comments

Comments
 (0)