From 8017ce26e98e86f9c353332f22404e402f13d891 Mon Sep 17 00:00:00 2001 From: David Barnett Date: Sun, 1 Jan 2023 00:29:33 -0600 Subject: [PATCH] Define config TOML/JSON schema Can be used with tools like taplo-lsp to show hints & validation in editors/IDEs. Won't apply automatically to config files until it's submitted to schemastore.org, but in the meantime it can be used via a schema directive (https://taplo.tamasfe.dev/configuration/directives.html#the-schema-directive) or other manual config mechanism. Context in #879. --- src/schemas/json/jj.json | 136 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 src/schemas/json/jj.json diff --git a/src/schemas/json/jj.json b/src/schemas/json/jj.json new file mode 100644 index 0000000000..dafdc89cb8 --- /dev/null +++ b/src/schemas/json/jj.json @@ -0,0 +1,136 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "title": "Jujutsu VCS config", + "type": "object", + "properties": { + "user": { + "type": "object", + "description": "Settings about the user", + "properties": { + "name": { + "type": "string", + "description": "Full name of the user, used in commits" + }, + "email": { + "type": "string", + "description": "User's email address, used in commits", + "format": "email" + } + } + }, + "operation": { + "type": "object", + "description": "Metadata to be attached to jj operations", + "properties": { + "hostname": { + "type": "string", + "format": "hostname" + }, + "username": { + "type": "string" + }, + "timestamp": { + "type": "string", + "format": "date-time" + } + } + }, + "push": { + "type": "object", + "properties": { + "branch-prefix": { + "type": "string", + "description": "Prefix used when pushing a change ID as a new branch", + "default": "push-" + } + } + }, + "ui": { + "type": "object", + "description": "UI settings", + "properties": { + "allow-init-native": { + "type": "boolean", + "description": "Whether to allow initializing a repo with the native backend" + }, + "relative-timestamps": { + "type": "boolean", + "description": "Whether to change timestamps to be rendered as a relative description instead of a full timestamp", + "default": false + }, + "default-revset": { + "type": "string", + "description": "Default set of revisions to show when no explicit revset is given for jj log and similar commands", + "default": "@ | (remote_branches() | tags()).. | ((remote_branches() | tags())..)-" + }, + "color": { + "type": "string", + "description": "Whether to colorize command output", + "enum": ["always", "never", "auto"], + "default": "auto" + }, + "pager": { + "type": "string", + "description": "Pager to use for displaying command output", + "default": "less -FRX" + }, + "editor": { + "type": "string", + "description": "Editor to use for commands that involve editing text" + }, + "diff-editor": { + "type": "string", + "description": "Editor tool to use for editing diffs", + "default": "meld" + }, + "merge-editor": { + "type": "string", + "description": "Tool to use for resolving three-way merges. Behavior for a given tool name can be configured in merge-tools.TOOL tables" + } + } + }, + "colors": { + "type": "object", + "description": "Mapping from jj formatter labels to ANSI color names" + }, + "merge-tools": { + "type": "object", + "description": "Tables of custom options to pass to the given merge tool (selected in ui.merge-editor)", + "additionalProperties": { + "type": "object", + "properties": { + "program": { + "type": "string" + }, + "merge-args": { + "type": "array", + "items": { + "type": "string" + } + }, + "merge-tool-edits-conflict-markers": { + "type": "boolean", + "default": false + } + } + } + }, + "revset-aliases": { + "type": "object", + "description": "Custom symbols/function aliases that can used in revset expressions", + "additionalProperties": { + "type": "string" + } + }, + "alias": { + "type": "object", + "description": "Custom subcommand aliases to be supported by the jj command", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } +}