{
  "$id": "https://json.schemastore.org/clangd.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "oneOrMorePath": {
      "oneOf": [
        {
          "type": "string",
          "$ref": "https://json.schemastore.org/base.json#/definitions/path"
        },
        {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "description": "A path pattern\nhttps://clangd.llvm.org/config.html#if",
            "$ref": "https://json.schemastore.org/base.json#/definitions/path"
          }
        }
      ]
    },
    "oneOrMoreFlags": {
      "oneOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "description": "A flag\nhttps://clangd.llvm.org/config.html#compileflags",
            "type": "string",
            "minLength": 1
          }
        }
      ]
    },
    "clangTidyCheck": {
      "type": "string",
      "enum": [
        "abseil-cleanup-ctad",
        "abseil-duration-addition",
        "abseil-duration-comparison",
        "abseil-duration-conversion-cast",
        "abseil-duration-division",
        "abseil-duration-factory-float",
        "abseil-duration-factory-scale",
        "abseil-duration-subtraction",
        "abseil-duration-unnecessary-conversion",
        "abseil-faster-strsplit-delimiter",
        "abseil-no-internal-dependencies",
        "abseil-no-namespace",
        "abseil-redundant-strcat-calls",
        "abseil-str-cat-append",
        "abseil-string-find-startswith",
        "abseil-string-find-str-contains",
        "abseil-time-comparison",
        "abseil-time-subtraction",
        "abseil-upgrade-duration-conversions",
        "altera-id-dependent-backward-branch",
        "altera-kernel-name-restriction",
        "altera-single-work-item-barrier",
        "altera-struct-pack-align",
        "altera-unroll-loops",
        "android-cloexec-accept",
        "android-cloexec-accept4",
        "android-cloexec-creat",
        "android-cloexec-dup",
        "android-cloexec-epoll-create",
        "android-cloexec-epoll-create1",
        "android-cloexec-fopen",
        "android-cloexec-inotify-init",
        "android-cloexec-inotify-init1",
        "android-cloexec-memfd-create",
        "android-cloexec-open",
        "android-cloexec-pipe",
        "android-cloexec-pipe2",
        "android-cloexec-socket",
        "android-comparison-in-temp-failure-retry",
        "boost-use-to-string",
        "bugprone-argument-comment",
        "bugprone-assert-side-effect",
        "bugprone-assignment-in-if-condition",
        "bugprone-bad-signal-to-kill-thread",
        "bugprone-bool-pointer-implicit-conversion",
        "bugprone-branch-clone",
        "bugprone-copy-constructor-init",
        "bugprone-dangling-handle",
        "bugprone-dynamic-static-initializers",
        "bugprone-easily-swappable-parameters",
        "bugprone-exception-escape",
        "bugprone-fold-init-type",
        "bugprone-forward-declaration-namespace",
        "bugprone-forwarding-reference-overload",
        "bugprone-implicit-widening-of-multiplication-result",
        "bugprone-inaccurate-erase",
        "bugprone-incorrect-roundings",
        "bugprone-infinite-loop",
        "bugprone-integer-division",
        "bugprone-lambda-function-name",
        "bugprone-macro-parentheses",
        "bugprone-macro-repeated-side-effects",
        "bugprone-misplaced-operator-in-strlen-in-alloc",
        "bugprone-misplaced-pointer-arithmetic-in-alloc",
        "bugprone-misplaced-widening-cast",
        "bugprone-move-forwarding-reference",
        "bugprone-multiple-statement-macro",
        "bugprone-no-escape",
        "bugprone-not-null-terminated-result",
        "bugprone-parent-virtual-call",
        "bugprone-posix-return",
        "bugprone-redundant-branch-condition",
        "bugprone-reserved-identifier",
        "bugprone-shared-ptr-array-mismatch",
        "bugprone-signal-handler",
        "bugprone-signed-char-misuse",
        "bugprone-sizeof-container",
        "bugprone-sizeof-expression",
        "bugprone-spuriously-wake-up-functions",
        "bugprone-standalone-empty",
        "bugprone-string-constructor",
        "bugprone-string-integer-assignment",
        "bugprone-string-literal-with-embedded-nul",
        "bugprone-stringview-nullptr",
        "bugprone-suspicious-enum-usage",
        "bugprone-suspicious-include",
        "bugprone-suspicious-memory-comparison",
        "bugprone-suspicious-memset-usage",
        "bugprone-suspicious-missing-comma",
        "bugprone-suspicious-realloc-usage",
        "bugprone-suspicious-semicolon",
        "bugprone-suspicious-string-compare",
        "bugprone-swapped-arguments",
        "bugprone-terminating-continue",
        "bugprone-throw-keyword-missing",
        "bugprone-too-small-loop-variable",
        "bugprone-unchecked-optional-access",
        "bugprone-undefined-memory-manipulation",
        "bugprone-undelegated-constructor",
        "bugprone-unhandled-exception-at-new",
        "bugprone-unhandled-self-assignment",
        "bugprone-unused-raii",
        "bugprone-unused-return-value",
        "bugprone-use-after-move",
        "bugprone-virtual-near-miss",
        "cert-dcl21-cpp",
        "cert-dcl50-cpp",
        "cert-dcl58-cpp",
        "cert-env33-c",
        "cert-err33-c",
        "cert-err34-c",
        "cert-err52-cpp",
        "cert-err58-cpp",
        "cert-err60-cpp",
        "cert-flp30-c",
        "cert-mem57-cpp",
        "cert-msc50-cpp",
        "cert-msc51-cpp",
        "cert-oop57-cpp",
        "cert-oop58-cpp",
        "clang-analyzer-core.DynamicTypePropagation",
        "clang-analyzer-core.uninitialized.CapturedBlockVariable",
        "clang-analyzer-cplusplus.InnerPointer",
        "clang-analyzer-nullability.NullableReturnedFromNonnull",
        "clang-analyzer-optin.osx.OSObjectCStyleCast",
        "clang-analyzer-optin.performance.GCDAntipattern",
        "clang-analyzer-optin.performance.Padding",
        "clang-analyzer-optin.portability.UnixAPI",
        "clang-analyzer-osx.MIG",
        "clang-analyzer-osx.NumberObjectConversion",
        "clang-analyzer-osx.OSObjectRetainCount",
        "clang-analyzer-osx.ObjCProperty",
        "clang-analyzer-osx.cocoa.AutoreleaseWrite",
        "clang-analyzer-osx.cocoa.Loops",
        "clang-analyzer-osx.cocoa.MissingSuperCall",
        "clang-analyzer-osx.cocoa.NonNilReturnValue",
        "clang-analyzer-osx.cocoa.RunLoopAutoreleaseLeak",
        "clang-analyzer-valist.CopyToSelf",
        "clang-analyzer-valist.Uninitialized",
        "clang-analyzer-valist.Unterminated",
        "concurrency-mt-unsafe",
        "concurrency-thread-canceltype-asynchronous",
        "cppcoreguidelines-avoid-const-or-ref-data-members",
        "cppcoreguidelines-avoid-do-while",
        "cppcoreguidelines-avoid-goto",
        "cppcoreguidelines-avoid-non-const-global-variables",
        "cppcoreguidelines-avoid-reference-coroutine-parameters",
        "cppcoreguidelines-init-variables",
        "cppcoreguidelines-interfaces-global-init",
        "cppcoreguidelines-macro-usage",
        "cppcoreguidelines-narrowing-conversions",
        "cppcoreguidelines-no-malloc",
        "cppcoreguidelines-owning-memory",
        "cppcoreguidelines-prefer-member-initializer",
        "cppcoreguidelines-pro-bounds-array-to-pointer-decay",
        "cppcoreguidelines-pro-bounds-constant-array-index",
        "cppcoreguidelines-pro-bounds-pointer-arithmetic",
        "cppcoreguidelines-pro-type-const-cast",
        "cppcoreguidelines-pro-type-cstyle-cast",
        "cppcoreguidelines-pro-type-member-init",
        "cppcoreguidelines-pro-type-reinterpret-cast",
        "cppcoreguidelines-pro-type-static-cast-downcast",
        "cppcoreguidelines-pro-type-union-access",
        "cppcoreguidelines-pro-type-vararg",
        "cppcoreguidelines-slicing",
        "cppcoreguidelines-special-member-functions",
        "cppcoreguidelines-virtual-class-destructor",
        "darwin-avoid-spinlock",
        "darwin-dispatch-once-nonstatic",
        "fuchsia-default-arguments-calls",
        "fuchsia-default-arguments-declarations",
        "fuchsia-multiple-inheritance",
        "fuchsia-overloaded-operator",
        "fuchsia-statically-constructed-objects",
        "fuchsia-trailing-return",
        "fuchsia-virtual-inheritance",
        "google-build-explicit-make-pair",
        "google-build-namespaces",
        "google-build-using-namespace",
        "google-default-arguments",
        "google-explicit-constructor",
        "google-global-names-in-headers",
        "google-objc-avoid-nsobject-new",
        "google-objc-avoid-throwing-exception",
        "google-objc-function-naming",
        "google-objc-global-variable-declaration",
        "google-readability-avoid-underscore-in-googletest-name",
        "google-readability-casting",
        "google-readability-todo",
        "google-runtime-int",
        "google-runtime-operator",
        "google-upgrade-googletest-case",
        "hicpp-avoid-goto",
        "hicpp-exception-baseclass",
        "hicpp-multiway-paths-covered",
        "hicpp-no-assembler",
        "hicpp-signed-bitwise",
        "linuxkernel-must-use-errs",
        "llvm-header-guard",
        "llvm-include-order",
        "llvm-namespace-comment",
        "llvm-prefer-isa-or-dyn-cast-in-conditionals",
        "llvm-prefer-register-over-unsigned",
        "llvm-twine-local",
        "llvmlibc-callee-namespace",
        "llvmlibc-implementation-in-namespace",
        "llvmlibc-restrict-system-libc-headers",
        "misc-confusable-identifiers",
        "misc-const-correctness",
        "misc-definitions-in-headers",
        "misc-misleading-bidirectional",
        "misc-misleading-identifier",
        "misc-misplaced-const",
        "misc-new-delete-overloads",
        "misc-no-recursion",
        "misc-non-copyable-objects",
        "misc-non-private-member-variables-in-classes",
        "misc-redundant-expression",
        "misc-static-assert",
        "misc-throw-by-value-catch-by-reference",
        "misc-unconventional-assign-operator",
        "misc-uniqueptr-reset-release",
        "misc-unused-alias-decls",
        "misc-unused-parameters",
        "misc-unused-using-decls",
        "misc-use-anonymous-namespace",
        "modernize-avoid-bind",
        "modernize-avoid-c-arrays",
        "modernize-concat-nested-namespaces",
        "modernize-deprecated-headers",
        "modernize-deprecated-ios-base-aliases",
        "modernize-loop-convert",
        "modernize-macro-to-enum",
        "modernize-make-shared",
        "modernize-make-unique",
        "modernize-pass-by-value",
        "modernize-raw-string-literal",
        "modernize-redundant-void-arg",
        "modernize-replace-auto-ptr",
        "modernize-replace-disallow-copy-and-assign-macro",
        "modernize-replace-random-shuffle",
        "modernize-return-braced-init-list",
        "modernize-shrink-to-fit",
        "modernize-unary-static-assert",
        "modernize-use-auto",
        "modernize-use-bool-literals",
        "modernize-use-default-member-init",
        "modernize-use-emplace",
        "modernize-use-equals-default",
        "modernize-use-equals-delete",
        "modernize-use-nodiscard",
        "modernize-use-noexcept",
        "modernize-use-nullptr",
        "modernize-use-override",
        "modernize-use-trailing-return-type",
        "modernize-use-transparent-functors",
        "modernize-use-uncaught-exceptions",
        "modernize-use-using",
        "mpi-buffer-deref",
        "mpi-type-mismatch",
        "objc-assert-equals",
        "objc-avoid-nserror-init",
        "objc-dealloc-in-category",
        "objc-forbidden-subclassing",
        "objc-missing-hash",
        "objc-nsdate-formatter",
        "objc-nsinvocation-argument-lifetime",
        "objc-property-declaration",
        "objc-super-self",
        "openmp-exception-escape",
        "openmp-use-default-none",
        "performance-faster-string-find",
        "performance-for-range-copy",
        "performance-implicit-conversion-in-loop",
        "performance-inefficient-algorithm",
        "performance-inefficient-string-concatenation",
        "performance-inefficient-vector-operation",
        "performance-move-const-arg",
        "performance-move-constructor-init",
        "performance-no-automatic-move",
        "performance-no-int-to-ptr",
        "performance-noexcept-move-constructor",
        "performance-trivially-destructible",
        "performance-type-promotion-in-math-fn",
        "performance-unnecessary-copy-initialization",
        "performance-unnecessary-value-param",
        "portability-restrict-system-includes",
        "portability-simd-intrinsics",
        "portability-std-allocator-const",
        "readability-avoid-const-params-in-decls",
        "readability-braces-around-statements",
        "readability-const-return-type",
        "readability-container-contains",
        "readability-container-data-pointer",
        "readability-container-size-empty",
        "readability-convert-member-functions-to-static",
        "readability-delete-null-pointer",
        "readability-duplicate-include",
        "readability-else-after-return",
        "readability-function-cognitive-complexity",
        "readability-function-size",
        "readability-identifier-length",
        "readability-identifier-naming",
        "readability-implicit-bool-conversion",
        "readability-inconsistent-declaration-parameter-name",
        "readability-isolate-declaration",
        "readability-magic-numbers",
        "readability-make-member-function-const",
        "readability-misleading-indentation",
        "readability-misplaced-array-index",
        "readability-named-parameter",
        "readability-non-const-parameter",
        "readability-qualified-auto",
        "readability-redundant-access-specifiers",
        "readability-redundant-control-flow",
        "readability-redundant-declaration",
        "readability-redundant-function-ptr-dereference",
        "readability-redundant-member-init",
        "readability-redundant-preprocessor",
        "readability-redundant-smartptr-get",
        "readability-redundant-string-cstr",
        "readability-redundant-string-init",
        "readability-simplify-boolean-expr",
        "readability-simplify-subscript-expr",
        "readability-static-accessed-through-instance",
        "readability-static-definition-in-anonymous-namespace",
        "readability-string-compare",
        "readability-suspicious-call-argument",
        "readability-uniqueptr-delete-release",
        "readability-uppercase-literal-suffix",
        "readability-use-anyofallof",
        "zircon-temporary-objects"
      ]
    },
    "oneOrMoreDiagnostics": {
      "oneOf": [
        {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "$ref": "#/definitions/clangTidyCheck"
            }
          ]
        },
        {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "description": "A diagnostic\nhttps://clangd.llvm.org/config.html#clangtidy",
            "anyOf": [
              {
                "type": "string",
                "minLength": 1
              },
              {
                "$ref": "#/definitions/clangTidyCheck"
              }
            ]
          }
        }
      ]
    }
  },
  "properties": {
    "If": {
      "title": "conditions",
      "description": "Conditions\nhttps://clangd.llvm.org/config.html#if",
      "type": "object",
      "properties": {
        "PathMatch": {
          "description": "Path patterns\nhttps://clangd.llvm.org/config.html#pathmatch",
          "$ref": "#/definitions/oneOrMorePath",
          "examples": [".*\\.h"]
        },
        "PathExclude": {
          "description": "An exclude path pattern\nhttps://clangd.llvm.org/config.html#pathexclude",
          "$ref": "#/definitions/oneOrMorePath",
          "examples": ["include/llvm-c/.*"]
        }
      },
      "additionalProperties": false
    },
    "CompileFlags": {
      "title": "compilation flags",
      "description": "Flag lists to be added or removed\nhttps://clangd.llvm.org/config.html#compileflags",
      "type": "object",
      "properties": {
        "Add": {
          "description": "Flags to be added to the compile command\nhttps://clangd.llvm.org/config.html#add",
          "$ref": "#/definitions/oneOrMoreFlags",
          "examples": [["-xc++", "-Wall"]]
        },
        "Remove": {
          "description": "Flags to be removed from the compile command\nhttps://clangd.llvm.org/config.html#remove",
          "$ref": "#/definitions/oneOrMoreFlags",
          "examples": ["-W*"]
        },
        "CompilationDatabase": {
          "description": "A directory to search for compilation database\nhttps://clangd.llvm.org/config.html#compilationdatabase",
          "oneOf": [
            {
              "$ref": "https://json.schemastore.org/base.json#/definitions/path"
            },
            {
              "enum": ["Ancestors", "None"]
            }
          ]
        },
        "Compiler": {
          "description": "An `argv[0]` replacement\nhttps://clangd.llvm.org/config.html#compiler",
          "type": "string",
          "minLength": 1,
          "examples": ["clang++"]
        }
      },
      "additionalProperties": false
    },
    "Index": {
      "title": "code interpretation",
      "description": "Code interpretation outside of the current file",
      "type": "object",
      "properties": {
        "Background": {
          "description": "Whether to produce a project index from files built in the background\nhttps://clangd.llvm.org/config.html#background",
          "type": "string",
          "enum": ["Build", "Skip"],
          "default": "Build"
        },
        "External": {
          "title": "index source",
          "description": "An external index source\nhttps://clangd.llvm.org/config.html#external",
          "oneOf": [
            {
              "type": "string",
              "pattern": "[nN][oO][nN][eE]"
            },
            {
              "required": ["File"],
              "properties": {
                "File": {
                  "description": "A file\nhttps://clangd.llvm.org/config.html#external",
                  "$ref": "https://json.schemastore.org/base.json#/definitions/path",
                  "examples": ["/abs/path/to/an/index.idx"]
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            {
              "required": ["Server"],
              "properties": {
                "Server": {
                  "description": "A server\nhttps://clangd.llvm.org/config.html#external",
                  "type": "string",
                  "examples": ["my.index.server.com:50051"]
                },
                "MountPoint": {
                  "description": "A mount point\nhttps://clangd.llvm.org/config.html#external",
                  "$ref": "https://json.schemastore.org/base.json#/definitions/path",
                  "examples": ["/files/under/this/project/"]
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          ]
        },
        "StandardLibrary": {
          "description": "Whether to index a standard library\nhttps://clangd.llvm.org/config.html#standardlibrary",
          "enum": ["Yes", "No"]
        }
      },
      "additionalProperties": false
    },
    "Style": {
      "title": "style",
      "description": "A code base style\nhttps://clangd.llvm.org/config.html#style",
      "type": "object",
      "properties": {
        "FullyQualifiedNamespaces": {
          "description": "List of fully qualified namespaces\nhttps://clangd.llvm.org/config.html#fullyqualifiednamespaces",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "Diagnostics": {
      "title": "diagnostics",
      "description": "Diagnostics\nhttps://clangd.llvm.org/config.html#diagnostics",
      "type": "object",
      "properties": {
        "Suppress": {
          "description": "Diagnostic codes that to be suppressed\nhttps://clangd.llvm.org/config.html#suppress",
          "oneOf": [
            {
              "type": "string",
              "const": "*"
            },
            {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "description": "A diagnostic code that to be suppressed\nhttps://clangd.llvm.org/config.html#suppress",
                "type": "string",
                "minLength": 1
              }
            }
          ]
        },
        "ClangTidy": {
          "title": "clangtidy options",
          "description": "Clang-Tidy options\nhttps://clangd.llvm.org/config.html#clangtidy",
          "type": "object",
          "properties": {
            "Add": {
              "description": "Checks to enable\nhttps://clangd.llvm.org/config.html#add-1",
              "$ref": "#/definitions/oneOrMoreDiagnostics",
              "examples": ["modernize*"]
            },
            "Remove": {
              "description": "Checks to disable\nhttps://clangd.llvm.org/config.html#remove-1",
              "$ref": "#/definitions/oneOrMoreDiagnostics",
              "examples": ["modernize-use-trailing-return-type"]
            },
            "CheckOptions": {
              "description": "Check's options\nhttps://clangd.llvm.org/config.html#checkoptions",
              "type": "object",
              "examples": [
                {
                  "readability-identifier-naming.VariableCase": "CamelCase"
                }
              ]
            }
          },
          "additionalProperties": false
        },
        "UnusedIncludes": {
          "description": "Whether to enable Include Cleaner's unused includes diagnostics\nhttps://clangd.llvm.org/config.html#unusedincludes",
          "type": "string",
          "enum": ["None", "Strict"],
          "default": "None"
        }
      },
      "additionalProperties": false
    },
    "Completion": {
      "title": "completion options",
      "description": "Completion options\nhttps://clangd.llvm.org/config.html#completion",
      "type": "object",
      "properties": {
        "AllScopes": {
          "description": "Whether to include suggestions from scopes that are not visible\nhttps://clangd.llvm.org/config.html#allscopes",
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "InlayHints": {
      "title": "inlay-hint options",
      "description": "Inlay-hints options\nhttps://clangd.llvm.org/config.html#inlayhints",
      "type": "object",
      "properties": {
        "Enabled": {
          "description": "Whether to enable inlay-hints\nhttps://clangd.llvm.org/config.html#enabled",
          "type": "boolean"
        },
        "ParameterNames": {
          "description": "Whether to enable inlay-hints for parameter names in function calls\nhttps://clangd.llvm.org/config.html#parameternames",
          "type": "boolean"
        },
        "DeducedTypes": {
          "description": "Whether to enable inlay-hints for deduced types\nhttps://clangd.llvm.org/config.html#deducedtypes",
          "type": "boolean"
        },
        "Designators": {
          "description": "Whether to enable inlay-hints for designators in aggregate initialization\nhttps://clangd.llvm.org/config.html#designators",
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "Hover": {
      "title": "hover options",
      "description": "Hover card's options\nhttps://clangd.llvm.org/config.html#hover",
      "type": "object",
      "properties": {
        "ShowAKA": {
          "description": "Whether to display desugared types\nhttps://clangd.llvm.org/config.html#showaka",
          "type": "boolean"
        }
      },
      "additionalProperties": false
    }
  },
  "type": "object"
}
