{
  "$defs": {
    "DiagnosticCode": {
      "oneOf": [
        {
          "enum": [
            "none"
          ],
          "type": "string"
        },
        {
          "const": "syntax-error",
          "description": "Syntax error",
          "type": "string"
        },
        {
          "const": "doc-syntax-error",
          "description": "Doc syntax error",
          "type": "string"
        },
        {
          "const": "type-not-found",
          "description": "Type not found",
          "type": "string"
        },
        {
          "const": "missing-return",
          "description": "Missing return statement",
          "type": "string"
        },
        {
          "const": "param-type-mismatch",
          "description": "Param Type not match",
          "type": "string"
        },
        {
          "const": "missing-parameter",
          "description": "Missing parameter",
          "type": "string"
        },
        {
          "const": "redundant-parameter",
          "description": "Redundant parameter",
          "type": "string"
        },
        {
          "const": "unreachable-code",
          "description": "Unreachable code",
          "type": "string"
        },
        {
          "const": "unused",
          "description": "Unused",
          "type": "string"
        },
        {
          "const": "unused-self",
          "description": "Unused implicit self parameter",
          "type": "string"
        },
        {
          "const": "undefined-global",
          "description": "Undefined global",
          "type": "string"
        },
        {
          "const": "undefined-global-assignment",
          "description": "Undefined global passed as a function argument or assigned to a\nvariable / table field. These are silent uses (no immediate runtime\nerror) so they're warned rather than errored.",
          "type": "string"
        },
        {
          "const": "deprecated",
          "description": "Deprecated",
          "type": "string"
        },
        {
          "const": "access-invisible",
          "description": "Access invisible",
          "type": "string"
        },
        {
          "const": "discard-returns",
          "description": "Discard return value",
          "type": "string"
        },
        {
          "const": "undefined-field",
          "description": "Undefined field",
          "type": "string"
        },
        {
          "const": "local-const-reassign",
          "description": "Local const reassign",
          "type": "string"
        },
        {
          "const": "iter-variable-reassign",
          "description": "Iter variable reassign",
          "type": "string"
        },
        {
          "const": "duplicate-type",
          "description": "Duplicate type",
          "type": "string"
        },
        {
          "const": "redefined-local",
          "description": "Redefined local",
          "type": "string"
        },
        {
          "const": "redefined-label",
          "description": "Redefined label",
          "type": "string"
        },
        {
          "const": "code-style-check",
          "description": "Code style check",
          "type": "string"
        },
        {
          "const": "need-check-nil",
          "description": "Need check nil",
          "type": "string"
        },
        {
          "const": "unchecked-nil-access",
          "description": "Unchecked nil access",
          "type": "string"
        },
        {
          "const": "await-in-sync",
          "description": "Await in sync",
          "type": "string"
        },
        {
          "const": "annotation-usage-error",
          "description": "Doc tag usage error",
          "type": "string"
        },
        {
          "const": "return-type-mismatch",
          "description": "Return type mismatch",
          "type": "string"
        },
        {
          "const": "missing-return-value",
          "description": "Missing return value",
          "type": "string"
        },
        {
          "const": "redundant-return-value",
          "description": "Redundant return value",
          "type": "string"
        },
        {
          "const": "undefined-doc-param",
          "description": "Undefined Doc Param",
          "type": "string"
        },
        {
          "const": "duplicate-doc-field",
          "description": "Duplicate doc field",
          "type": "string"
        },
        {
          "const": "unknown-doc-tag",
          "description": "Unknown doc annotation",
          "type": "string"
        },
        {
          "const": "missing-fields",
          "description": "Missing fields",
          "type": "string"
        },
        {
          "const": "inject-field",
          "description": "Inject Field",
          "type": "string"
        },
        {
          "const": "circle-doc-class",
          "description": "Circle Doc Class",
          "type": "string"
        },
        {
          "const": "incomplete-signature-doc",
          "description": "Incomplete signature doc",
          "type": "string"
        },
        {
          "const": "missing-global-doc",
          "description": "Missing global doc",
          "type": "string"
        },
        {
          "const": "assign-type-mismatch",
          "description": "Assign type mismatch",
          "type": "string"
        },
        {
          "const": "duplicate-require",
          "description": "Duplicate require",
          "type": "string"
        },
        {
          "const": "non-literal-expressions-in-assert",
          "description": "non-literal-expressions-in-assert",
          "type": "string"
        },
        {
          "const": "unbalanced-assignments",
          "description": "Unbalanced assignments",
          "type": "string"
        },
        {
          "const": "unnecessary-assert",
          "description": "unnecessary-assert",
          "type": "string"
        },
        {
          "const": "unnecessary-if",
          "description": "unnecessary-if",
          "type": "string"
        },
        {
          "const": "duplicate-set-field",
          "description": "duplicate-set-field",
          "type": "string"
        },
        {
          "const": "duplicate-index",
          "description": "duplicate-index",
          "type": "string"
        },
        {
          "const": "generic-constraint-mismatch",
          "description": "generic-constraint-mismatch",
          "type": "string"
        },
        {
          "const": "cast-type-mismatch",
          "description": "cast-type-mismatch",
          "type": "string"
        },
        {
          "const": "require-module-not-visible",
          "description": "require-module-not-visible",
          "type": "string"
        },
        {
          "const": "enum-value-mismatch",
          "description": "enum-value-mismatch",
          "type": "string"
        },
        {
          "const": "preferred-local-alias",
          "description": "preferred-local-alias",
          "type": "string"
        },
        {
          "const": "read-only",
          "description": "readonly",
          "type": "string"
        },
        {
          "const": "global-in-non-module",
          "description": "Global variable defined in non-module scope",
          "type": "string"
        },
        {
          "const": "attribute-param-type-mismatch",
          "description": "attribute-param-type-mismatch",
          "type": "string"
        },
        {
          "const": "attribute-missing-parameter",
          "description": "attribute-missing-parameter",
          "type": "string"
        },
        {
          "const": "attribute-redundant-parameter",
          "description": "attribute-redundant-parameter",
          "type": "string"
        },
        {
          "const": "invert-if",
          "description": "invert-if",
          "type": "string"
        },
        {
          "const": "call-non-callable",
          "description": "Call to a non-callable value",
          "type": "string"
        },
        {
          "const": "gmod-invalid-hook-name",
          "description": "gmod-invalid-hook-name",
          "type": "string"
        },
        {
          "const": "gmod-realm-mismatch",
          "description": "gmod-realm-mismatch (strict realm mismatch)",
          "type": "string"
        },
        {
          "const": "gmod-realm-mismatch-heuristic",
          "description": "gmod-realm-mismatch-heuristic (heuristic realm mismatch)",
          "type": "string"
        },
        {
          "const": "gmod-unknown-realm",
          "description": "gmod-unknown-realm (realm could not be resolved)",
          "type": "string"
        },
        {
          "const": "gmod-unknown-net-message",
          "description": "gmod-unknown-net-message",
          "type": "string"
        },
        {
          "const": "gmod-net-read-write-type-mismatch",
          "description": "gmod-net-read-write-type-mismatch",
          "type": "string"
        },
        {
          "const": "gmod-net-read-write-order-mismatch",
          "description": "gmod-net-read-write-order-mismatch",
          "type": "string"
        },
        {
          "const": "gmod-net-missing-network-counterpart",
          "description": "gmod-net-missing-network-counterpart",
          "type": "string"
        },
        {
          "const": "gmod-net-read-write-bits-mismatch",
          "description": "gmod-net-read-write-bits-mismatch",
          "type": "string"
        },
        {
          "const": "gmod-duplicate-system-registration",
          "description": "gmod-duplicate-system-registration",
          "type": "string"
        },
        {
          "const": "gmod-null-check",
          "description": "gmod-null-check",
          "type": "string"
        },
        {
          "const": "undefined-global-argument",
          "description": "Deprecated alias for `undefined-global-assignment`. Accepted for backward compatibility.",
          "type": "string"
        }
      ]
    },
    "DiagnosticSeveritySetting": {
      "oneOf": [
        {
          "const": "error",
          "description": "Represents an error diagnostic severity.",
          "type": "string"
        },
        {
          "const": "warning",
          "description": "Represents a warning diagnostic severity.",
          "type": "string"
        },
        {
          "const": "information",
          "description": "Represents an information diagnostic severity.",
          "type": "string"
        },
        {
          "const": "hint",
          "description": "Represents a hint diagnostic severity.",
          "type": "string"
        }
      ]
    },
    "DocSyntax": {
      "enum": [
        "none",
        "md",
        "myst",
        "rst"
      ],
      "type": "string"
    },
    "EmmyLibraryConfig": {
      "properties": {
        "ignoreDir": {
          "default": [],
          "description": "Ignore directories within this library",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "ignoreGlobs": {
          "default": [],
          "description": "Ignore globs within this library. eg: [\"**/*.lua\"]",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "path": {
          "description": "Library path",
          "type": "string"
        }
      },
      "required": [
        "path"
      ],
      "type": "object"
    },
    "EmmyLibraryItem": {
      "anyOf": [
        {
          "description": "Simple library path string",
          "type": "string"
        },
        {
          "$ref": "#/$defs/EmmyLibraryConfig",
          "description": "Library configuration with path and ignore rules"
        }
      ]
    },
    "EmmyrcCodeAction": {
      "properties": {
        "insertSpace": {
          "default": false,
          "description": "Add space after `---` comments when inserting `@diagnostic disable-next-line`.",
          "type": "boolean",
          "x-vscode-setting": true
        }
      },
      "type": "object"
    },
    "EmmyrcCodeLens": {
      "properties": {
        "enable": {
          "default": true,
          "description": "Enable code lens.",
          "type": "boolean",
          "x-vscode-setting": true
        }
      },
      "type": "object"
    },
    "EmmyrcCompletion": {
      "description": "Configuration for EmmyLua code completion.",
      "properties": {
        "autoRequire": {
          "default": true,
          "description": "Automatically insert call to `require` when autocompletion\ninserts objects from other modules.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "autoRequireFunction": {
          "default": "require",
          "description": "The function used for auto-requiring modules.",
          "type": "string"
        },
        "autoRequireNamingConvention": {
          "$ref": "#/$defs/EmmyrcFilenameConvention",
          "default": "keep",
          "description": "The naming convention for auto-required filenames."
        },
        "autoRequireSeparator": {
          "default": ".",
          "description": "A separator used in auto-require paths.",
          "type": "string"
        },
        "baseFunctionIncludesName": {
          "default": true,
          "description": "Whether to include the name in the base function completion. Effect: `function () end` -> `function name() end`.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "callSnippet": {
          "default": true,
          "description": "Whether to use call snippets in completions.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "enable": {
          "default": true,
          "description": "Enable autocompletion.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "postfix": {
          "default": "@",
          "description": "Symbol that's used to trigger postfix autocompletion.",
          "type": "string",
          "x-vscode-setting": {
            "default": null,
            "enum": [
              null,
              "@",
              ".",
              ":"
            ],
            "enumItemLabels": [
              "Default"
            ],
            "markdownEnumDescriptions": [
              "%config.common.enum.default.description%"
            ],
            "type": [
              "string",
              "null"
            ]
          }
        },
        "stagedCallSnippets": {
          "default": true,
          "description": "Whether to stage known API call snippets so autocomplete can guide\nthe user through the next relevant argument.",
          "type": "boolean",
          "x-vscode-setting": true
        }
      },
      "type": "object"
    },
    "EmmyrcDiagnostic": {
      "description": "Represents the diagnostic configuration for Emmyrc.",
      "properties": {
        "diagnosticInterval": {
          "description": "Delay between opening/changing a file and scanning it for errors, in milliseconds.",
          "format": "uint64",
          "minimum": 0,
          "type": [
            "integer",
            "null"
          ],
          "x-vscode-setting": true
        },
        "disable": {
          "default": [],
          "description": "A list of diagnostic codes that are disabled.",
          "items": {
            "$ref": "#/$defs/DiagnosticCode"
          },
          "type": "array"
        },
        "enable": {
          "default": true,
          "description": "A flag indicating whether diagnostics are enabled.",
          "type": "boolean"
        },
        "enables": {
          "default": [],
          "description": "A list of diagnostic codes that are enabled.",
          "items": {
            "$ref": "#/$defs/DiagnosticCode"
          },
          "type": "array"
        },
        "globals": {
          "default": [],
          "description": "A list of global variables.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "globalsRegex": {
          "default": [],
          "description": "A list of regular expressions for global variables.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "severity": {
          "additionalProperties": {
            "$ref": "#/$defs/DiagnosticSeveritySetting"
          },
          "default": {},
          "description": "A map of diagnostic codes to their severity settings.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "EmmyrcDoc": {
      "properties": {
        "knownTags": {
          "default": [],
          "description": "List of known documentation tags.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "privateName": {
          "default": [],
          "description": "Treat specific field names as private, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are private, witch can only be accessed in the class where the definition is located.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "rstDefaultRole": {
          "description": "When `syntax` is `Myst` or `Rst`, specifies default role used\nwith RST processor.",
          "type": [
            "string",
            "null"
          ]
        },
        "rstPrimaryDomain": {
          "description": "When `syntax` is `Myst` or `Rst`, specifies primary domain used\nwith RST processor.",
          "type": [
            "string",
            "null"
          ]
        },
        "syntax": {
          "$ref": "#/$defs/DocSyntax",
          "default": "md",
          "description": "Syntax for highlighting documentation."
        }
      },
      "type": "object"
    },
    "EmmyrcDocumentColor": {
      "properties": {
        "enable": {
          "default": true,
          "description": "Enable color previews and color picker support for strings, GMod color calls, color tuples, and color variables.",
          "type": "boolean",
          "x-vscode-setting": true
        }
      },
      "type": "object"
    },
    "EmmyrcExternalTool": {
      "properties": {
        "args": {
          "default": [],
          "description": "The arguments to pass to the external tool.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "program": {
          "default": "",
          "description": "The command to run the external tool.",
          "type": "string"
        },
        "timeout": {
          "default": 5000,
          "description": "The timeout for the external tool in milliseconds.",
          "format": "uint64",
          "minimum": 0,
          "type": "integer"
        }
      },
      "type": "object"
    },
    "EmmyrcFilenameConvention": {
      "oneOf": [
        {
          "const": "keep",
          "description": "Keep the original filename.",
          "type": "string"
        },
        {
          "const": "snake-case",
          "description": "Convert the filename to snake_case.",
          "type": "string"
        },
        {
          "const": "pascal-case",
          "description": "Convert the filename to PascalCase.",
          "type": "string"
        },
        {
          "const": "camel-case",
          "description": "Convert the filename to camelCase.",
          "type": "string"
        },
        {
          "const": "keep-class",
          "description": "When returning class definition, use class name, otherwise keep original name.",
          "type": "string"
        }
      ]
    },
    "EmmyrcFormatAlignArrayTable": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/$defs/EmmyrcFormatBoolKeyword"
        },
        {
          "$ref": "#/$defs/EmmyrcFormatAlignArrayTableMode"
        }
      ]
    },
    "EmmyrcFormatAlignArrayTableMode": {
      "enum": [
        "none",
        "always",
        "contain_curly"
      ],
      "type": "string"
    },
    "EmmyrcFormatAlignChainExpr": {
      "enum": [
        "none",
        "always",
        "only_call_stmt"
      ],
      "type": "string"
    },
    "EmmyrcFormatAlignContinuousAssignStatement": {
      "enum": [
        "true",
        "false",
        "always"
      ],
      "type": "string"
    },
    "EmmyrcFormatAsymmetricOperatorSpacing": {
      "enum": [
        "none",
        "always",
        "no_space_asym"
      ],
      "type": "string"
    },
    "EmmyrcFormatBoolKeyword": {
      "enum": [
        "true",
        "false"
      ],
      "type": "string"
    },
    "EmmyrcFormatCallArgParentheses": {
      "enum": [
        "keep",
        "remove",
        "remove_table_only",
        "remove_string_only",
        "always"
      ],
      "type": "string"
    },
    "EmmyrcFormatConfigPrecedence": {
      "oneOf": [
        {
          "const": "preferEditorconfig",
          "description": "Prefer discovered .editorconfig files over .gluarc formatter overrides.",
          "type": "string"
        },
        {
          "const": "preferGluarc",
          "description": "Prefer .gluarc formatter overrides over discovered .editorconfig files.",
          "type": "string"
        }
      ]
    },
    "EmmyrcFormatEndOfLine": {
      "enum": [
        "crlf",
        "lf",
        "cr",
        "auto",
        "unset"
      ],
      "type": "string"
    },
    "EmmyrcFormatEndStatementWithSemicolon": {
      "enum": [
        "keep",
        "always",
        "same_line",
        "replace_with_newline",
        "never"
      ],
      "type": "string"
    },
    "EmmyrcFormatIndentStyle": {
      "enum": [
        "tab",
        "space"
      ],
      "type": "string"
    },
    "EmmyrcFormatKeepKeyword": {
      "enum": [
        "keep"
      ],
      "type": "string"
    },
    "EmmyrcFormatMaxLineLength": {
      "anyOf": [
        {
          "format": "uint32",
          "minimum": 0,
          "type": "integer"
        },
        {
          "$ref": "#/$defs/EmmyrcFormatUnsetKeyword"
        }
      ]
    },
    "EmmyrcFormatPreset": {
      "oneOf": [
        {
          "const": "default",
          "description": "Use EmmyLuaCodeStyle built-in defaults. No style overrides are applied.",
          "type": "string"
        },
        {
          "const": "cfc",
          "description": "Apply the built-in CFC (Clockwork Fighters Community) style preset: 4-space indentation, spaces inside parentheses, semicolons replaced with newlines.",
          "type": "string"
        },
        {
          "const": "custom",
          "description": "Apply no preset. Only the `styleOverrides` you configure explicitly take effect; everything else uses the formatter's compiled-in default.",
          "type": "string"
        }
      ]
    },
    "EmmyrcFormatQuoteStyle": {
      "enum": [
        "none",
        "single",
        "double"
      ],
      "type": "string"
    },
    "EmmyrcFormatSpaceAroundAssignOperator": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/$defs/EmmyrcFormatBoolKeyword"
        },
        {
          "$ref": "#/$defs/EmmyrcFormatAsymmetricOperatorSpacing"
        }
      ]
    },
    "EmmyrcFormatSpaceAroundConcatOperator": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/$defs/EmmyrcFormatBoolKeyword"
        },
        {
          "$ref": "#/$defs/EmmyrcFormatAsymmetricOperatorSpacing"
        }
      ]
    },
    "EmmyrcFormatSpaceBeforeFunctionCallSingleArg": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/$defs/EmmyrcFormatBoolKeyword"
        },
        {
          "$ref": "#/$defs/EmmyrcFormatSpaceBeforeFunctionCallSingleArgMode"
        }
      ]
    },
    "EmmyrcFormatSpaceBeforeFunctionCallSingleArgMode": {
      "enum": [
        "always",
        "only_string",
        "only_table",
        "none"
      ],
      "type": "string"
    },
    "EmmyrcFormatSpaceBeforeInlineComment": {
      "anyOf": [
        {
          "format": "uint32",
          "minimum": 0,
          "type": "integer"
        },
        {
          "$ref": "#/$defs/EmmyrcFormatKeepKeyword"
        }
      ]
    },
    "EmmyrcFormatStyleOverrides": {
      "description": "Typed EmmyLuaCodeStyle overrides for built-in formatting.",
      "properties": {
        "align_array_table": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatAlignArrayTable"
            },
            {
              "type": "null"
            }
          ],
          "description": "Array table layout: `none` keeps items inline, `always` puts each item on its own line, `contain_curly` uses multiline only when a nested table is present."
        },
        "align_call_args": {
          "description": "Vertically align arguments of multi-line function calls to the opening parenthesis.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "align_chain_expr": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatAlignChainExpr"
            },
            {
              "type": "null"
            }
          ],
          "description": "Align chained method / field expressions: `none` disables, `always` aligns all chains, `only_call_stmt` aligns only call statement chains."
        },
        "align_continuous_assign_statement": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatAlignContinuousAssignStatement"
            },
            {
              "type": "null"
            }
          ],
          "description": "Align consecutive assignment statements on their `=` sign (`true` aligns within a block, `always` aligns across blank lines, `false` disables)."
        },
        "align_continuous_inline_comment": {
          "description": "Align the `--` of inline comments across consecutive lines so they form a vertical column.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "align_continuous_line_space": {
          "description": "Maximum number of blank lines between consecutive statements before they are no longer considered part of the same aligned block.",
          "format": "uint32",
          "minimum": 0,
          "type": [
            "integer",
            "null"
          ]
        },
        "align_continuous_rect_table_field": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatAlignContinuousAssignStatement"
            },
            {
              "type": "null"
            }
          ],
          "description": "Align key-value fields in rectangular table literals so that `=` signs line up vertically (`true`, `false`, `always`)."
        },
        "align_continuous_similar_call_args": {
          "description": "Align arguments across similar consecutive function calls so that matching argument positions line up vertically.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "align_function_params": {
          "description": "Vertically align parameters in multi-line function declarations to the opening parenthesis.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "align_if_branch": {
          "description": "Vertically align `if` / `elseif` / `else` condition keywords.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "allow_non_indented_comments": {
          "description": "Allow comments that start at column 0 to remain un-indented even when inside an indented block.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "auto_collapse_lines": {
          "description": "Collapse short multi-statement blocks into a single line when they fit within `max_line_length`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "break_all_list_when_line_exceed": {
          "description": "When a line exceeds `max_line_length`, break every item in the containing list onto its own line rather than only the overflowing item.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "break_before_braces": {
          "description": "Place the opening `{` of a table constructor on a new line instead of at the end of the preceding line.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "break_multiline_call_expression_list": {
          "description": "When a function call already spans multiple lines, put each argument and the closing `)` on their own lines.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "call_arg_parentheses": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatCallArgParentheses"
            },
            {
              "type": "null"
            }
          ],
          "description": "How to handle parentheses around single-argument function calls with a string or table literal (`keep`, `remove`, `remove_table_only`, `remove_string_only`, `always`)."
        },
        "continuation_indent": {
          "description": "Number of extra spaces used for indenting continuation lines when a line is wrapped.",
          "format": "uint32",
          "minimum": 0,
          "type": [
            "integer",
            "null"
          ]
        },
        "detect_end_of_line": {
          "description": "Detect line endings from file content.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "end_of_line": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatEndOfLine"
            },
            {
              "type": "null"
            }
          ],
          "description": "Line ending preference."
        },
        "end_statement_with_semicolon": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatEndStatementWithSemicolon"
            },
            {
              "type": "null"
            }
          ],
          "description": "Semicolon handling: `keep` preserves existing, `always` adds to all statements, `same_line` adds between same-line statements, `replace_with_newline` replaces semicolons with newlines, `never` removes all."
        },
        "ignore_space_after_colon": {
          "description": "Do not normalize spacing after `:` in method call and definition syntax.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "ignore_spaces_inside_function_call": {
          "description": "When `true`, preserve existing spacing inside function call arguments instead of normalizing it.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "indent_size": {
          "description": "Number of spaces used for one indentation level.",
          "format": "uint32",
          "minimum": 0,
          "type": [
            "integer",
            "null"
          ]
        },
        "indent_style": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatIndentStyle"
            },
            {
              "type": "null"
            }
          ],
          "description": "`tab` or `space` indentation mode."
        },
        "insert_final_newline": {
          "description": "Ensure file ends with a newline.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "keep_indents_on_empty_lines": {
          "description": "Keep indentation whitespace on otherwise blank lines instead of stripping it.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "line_space_after_comment": {
          "description": "Line spacing after comments (`keep`, `fixed(n)`, `min(n)`, `max(n)`).",
          "type": [
            "string",
            "null"
          ]
        },
        "line_space_after_do_statement": {
          "description": "Line spacing after `do` statements (`keep`, `fixed(n)`, `min(n)`, `max(n)`).",
          "type": [
            "string",
            "null"
          ]
        },
        "line_space_after_expression_statement": {
          "description": "Line spacing after expression statements (`keep`, `fixed(n)`, `min(n)`, `max(n)`).",
          "type": [
            "string",
            "null"
          ]
        },
        "line_space_after_for_statement": {
          "description": "Line spacing after `for` statements (`keep`, `fixed(n)`, `min(n)`, `max(n)`).",
          "type": [
            "string",
            "null"
          ]
        },
        "line_space_after_function_statement": {
          "description": "Line spacing after function statements (`keep`, `fixed(n)`, `min(n)`, `max(n)`).",
          "type": [
            "string",
            "null"
          ]
        },
        "line_space_after_if_statement": {
          "description": "Line spacing after `if` statements (`keep`, `fixed(n)`, `min(n)`, `max(n)`).",
          "type": [
            "string",
            "null"
          ]
        },
        "line_space_after_local_or_assign_statement": {
          "description": "Line spacing after local/assignment statements (`keep`, `fixed(n)`, `min(n)`, `max(n)`).",
          "type": [
            "string",
            "null"
          ]
        },
        "line_space_after_repeat_statement": {
          "description": "Line spacing after `repeat` statements (`keep`, `fixed(n)`, `min(n)`, `max(n)`).",
          "type": [
            "string",
            "null"
          ]
        },
        "line_space_after_while_statement": {
          "description": "Line spacing after `while` statements (`keep`, `fixed(n)`, `min(n)`, `max(n)`).",
          "type": [
            "string",
            "null"
          ]
        },
        "line_space_around_block": {
          "description": "Line spacing around blocks (`keep`, `fixed(n)`, `min(n)`, `max(n)`).",
          "type": [
            "string",
            "null"
          ]
        },
        "max_line_length": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatMaxLineLength"
            },
            {
              "type": "null"
            }
          ],
          "description": "Column limit before the formatter wraps items onto new lines. Set to `\"unset\"` to disable line length enforcement."
        },
        "never_indent_before_if_condition": {
          "description": "Do not add extra indentation to wrapped `if`/`elseif` condition expressions.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "never_indent_comment_on_if_branch": {
          "description": "Do not indent a lone comment that appears inside an `if` branch body.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "quote_style": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatQuoteStyle"
            },
            {
              "type": "null"
            }
          ],
          "description": "Preferred quote style for string literals. `none` preserves the original style."
        },
        "remove_call_expression_list_finish_comma": {
          "description": "Remove trailing commas that appear at the end of function call argument lists.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "remove_redundant_condition_parentheses": {
          "description": "Remove redundant parentheses around single-line condition expressions such as `if (x) then`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_after_comma": {
          "description": "Add a space after commas in expressions and argument lists.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_after_comma_in_for_statement": {
          "description": "Add a space after commas in `for` loop range expressions.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_after_comment_dash": {
          "description": "Ensure a single space exists after the comment dash prefix (`--`).",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_around_assign_operator": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatSpaceAroundAssignOperator"
            },
            {
              "type": "null"
            }
          ],
          "description": "Spaces around assignment operators (`=`). Accepts `true`/`false`, or `\"none\"` (no spaces), `\"always\"` (spaces on both sides), `\"no_space_asym\"` (asymmetric spacing)."
        },
        "space_around_concat_operator": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatSpaceAroundConcatOperator"
            },
            {
              "type": "null"
            }
          ],
          "description": "Spaces around the concatenation operator (`..`). Accepts `true`/`false`, or `\"none\"` (no spaces), `\"always\"` (spaces on both sides), `\"no_space_asym\"` (space on left side only)."
        },
        "space_around_logical_operator": {
          "description": "Add spaces around logical operators (`and`, `or`, `not`).",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_around_math_operator": {
          "description": "Add spaces around math operators (`+`, `-`, `*`, `/`, `%`, `^`).",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_around_table_append_operator": {
          "description": "Add spaces around the table append operator (`#t + 1` style appends).",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_around_table_field_list": {
          "description": "Add spaces inside table braces, e.g. `{ a = 1 }` vs `{a = 1}`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_before_attribute": {
          "description": "Add a space before Lua attribute annotations, e.g. `local x <const>`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_before_closure_open_parenthesis": {
          "description": "Add a space before `(` in anonymous function expressions, e.g. `function ()`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_before_function_call_open_parenthesis": {
          "description": "Add a space before `(` in function calls, e.g. `print ('hello')`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_before_function_call_single_arg": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatSpaceBeforeFunctionCallSingleArg"
            },
            {
              "type": "null"
            }
          ],
          "description": "Space handling before a single string or table literal argument: `always`, `only_string`, `only_table`, or `none`."
        },
        "space_before_function_open_parenthesis": {
          "description": "Add a space before `(` in function declarations, e.g. `function foo ()`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_before_inline_comment": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatSpaceBeforeInlineComment"
            },
            {
              "type": "null"
            }
          ],
          "description": "Number of spaces to enforce before inline comments (`--`), or `\"keep\"` to preserve existing spacing."
        },
        "space_before_open_square_bracket": {
          "description": "Add a space before `[` in table index expressions, e.g. `t [key]`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_inside_function_call_parentheses": {
          "description": "Add spaces inside function call parentheses, e.g. `print( 'hello' )`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_inside_function_param_list_parentheses": {
          "description": "Add spaces inside function parameter list parentheses, e.g. `function foo( a, b )`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "space_inside_square_brackets": {
          "description": "Add spaces inside square bracket index expressions, e.g. `t[ 1 ]`.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "tab_width": {
          "description": "Display width of a tab character in spaces, used for visual alignment calculations.",
          "format": "uint32",
          "minimum": 0,
          "type": [
            "integer",
            "null"
          ]
        },
        "table_separator_style": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatTableSeparatorStyle"
            },
            {
              "type": "null"
            }
          ],
          "description": "Separator character used between table fields (`none`, `comma`, `semicolon`, `only_kv_colon`)."
        },
        "trailing_table_separator": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatTrailingTableSeparator"
            },
            {
              "type": "null"
            }
          ],
          "description": "Whether to add or remove a trailing separator after the last field in a table (`keep`, `never`, `always`, `smart`)."
        }
      },
      "type": "object"
    },
    "EmmyrcFormatTableSeparatorStyle": {
      "enum": [
        "none",
        "comma",
        "semicolon",
        "only_kv_colon"
      ],
      "type": "string"
    },
    "EmmyrcFormatTrailingTableSeparator": {
      "enum": [
        "keep",
        "never",
        "always",
        "smart"
      ],
      "type": "string"
    },
    "EmmyrcFormatUnsetKeyword": {
      "enum": [
        "unset"
      ],
      "type": "string"
    },
    "EmmyrcGmod": {
      "properties": {
        "annotationsPath": {
          "description": "Path to GMod annotations to load as core library.\nWhen set to empty string or not provided, uses VSCode extension's auto-downloaded annotations (if enabled).\nSet to explicit path to override, or use `autoLoadAnnotations: false` in .gluarc to disable entirely.",
          "type": [
            "string",
            "null"
          ]
        },
        "autoDetectGamemodeBase": {
          "description": "Automatically detect and add the base gamemode as a library when a gamemode\nderives from another (via the `\"base\"` field in the gamemode `.txt` file).\nSet to `false` to disable this detection.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "autoLoadAnnotations": {
          "description": "Disable auto-loading of annotations (from VSCode or default path).\nThis takes precedence over extension settings.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "defaultRealm": {
          "$ref": "#/$defs/EmmyrcGmodRealm",
          "default": "shared"
        },
        "detectRealmFromCalls": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "detectRealmFromFilename": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "dynamicFieldsGlobal": {
          "default": true,
          "type": "boolean"
        },
        "enabled": {
          "default": true,
          "type": "boolean"
        },
        "fileParamDefaults": {
          "additionalProperties": {
            "type": "string"
          },
          "default": {
            "ang": "Angle",
            "angle": "Angle",
            "attacker": "Entity",
            "cmd": "CUserCmd",
            "col": "Color",
            "color": "Color",
            "dmginfo": "CTakeDamageInfo",
            "ent": "Entity",
            "entity": "Entity",
            "func": "function",
            "inflictor": "Entity",
            "mat": "IMaterial",
            "npc": "NPC",
            "panel": "Panel",
            "phys": "PhysObj",
            "player": "Player",
            "ply": "Player",
            "pnl": "Panel",
            "pos": "Vector",
            "tr": "TraceResult",
            "trace": "TraceResult",
            "vec": "Vector",
            "veh": "Entity",
            "vehicle": "Entity",
            "victim": "Entity",
            "weapon": "Weapon",
            "wep": "Weapon"
          },
          "description": "Parameter-name to type-name fallbacks for otherwise unresolved params.",
          "type": "object",
          "x-gluals-editor": "mappingTable",
          "x-gluals-key-label": "Parameter",
          "x-gluals-value-label": "Type"
        },
        "hookMappings": {
          "$ref": "#/$defs/EmmyrcGmodHookMappings",
          "default": {
            "emitterToHook": {},
            "methodPrefixes": [],
            "methodToHook": {}
          }
        },
        "inferDynamicFields": {
          "default": true,
          "type": "boolean"
        },
        "network": {
          "$ref": "#/$defs/EmmyrcGmodNetwork",
          "default": {
            "codeLensEnabled": true,
            "completion": {
              "mismatchHints": true,
              "smartReadSuggestions": true
            },
            "enabled": true
          }
        },
        "outline": {
          "$ref": "#/$defs/EmmyrcGmodOutline",
          "default": {
            "verbosity": "normal"
          }
        },
        "scriptedClassScopes": {
          "$ref": "#/$defs/EmmyrcGmodScriptedClassScopes",
          "default": {
            "include": [
              {
                "classGlobal": "ENT",
                "icon": "folder-library",
                "id": "entities",
                "include": [
                  "entities/**"
                ],
                "label": "Entities",
                "path": [
                  "entities"
                ],
                "rootDir": "lua/entities",
                "scaffold": {
                  "files": [
                    {
                      "path": "{{name}}/shared.lua",
                      "template": "ent_shared.lua"
                    },
                    {
                      "path": "{{name}}/init.lua",
                      "template": "ent_init.lua"
                    },
                    {
                      "path": "{{name}}/cl_init.lua",
                      "template": "ent_cl_init.lua"
                    }
                  ]
                }
              },
              {
                "classGlobal": "SWEP",
                "exclude": [
                  "weapons/gmod_tool/stools/**"
                ],
                "icon": "folder-library",
                "id": "weapons",
                "include": [
                  "weapons/**"
                ],
                "label": "SWEPs",
                "path": [
                  "weapons"
                ],
                "rootDir": "lua/weapons",
                "scaffold": {
                  "files": [
                    {
                      "path": "{{name}}/shared.lua",
                      "template": "swep_shared.lua"
                    }
                  ]
                }
              },
              {
                "classGlobal": "EFFECT",
                "icon": "folder-library",
                "id": "effects",
                "include": [
                  "effects/**"
                ],
                "label": "Effects",
                "path": [
                  "effects"
                ],
                "rootDir": "lua/effects",
                "scaffold": {
                  "files": [
                    {
                      "path": "{{name}}.lua",
                      "template": "effect.lua"
                    }
                  ]
                }
              },
              {
                "classGlobal": "TOOL",
                "icon": "tools",
                "id": "stools",
                "include": [
                  "weapons/gmod_tool/stools/**",
                  "weapons/gmod_tool/*.lua"
                ],
                "label": "STools",
                "parentId": "weapons",
                "path": [
                  "weapons",
                  "gmod_tool",
                  "stools"
                ],
                "rootDir": "lua/weapons/gmod_tool/stools",
                "scaffold": {
                  "files": [
                    {
                      "path": "{{name}}.lua",
                      "template": "tool.lua"
                    }
                  ]
                }
              },
              {
                "classGlobal": "PLUGIN",
                "icon": "extensions",
                "id": "plugins",
                "include": [
                  "plugins/**"
                ],
                "label": "Plugins",
                "path": [
                  "plugins"
                ],
                "rootDir": "plugins"
              },
              {
                "classGlobal": "GM",
                "classNamePrefix": "gamemode_",
                "icon": "folder-library",
                "id": "gamemodes",
                "include": [
                  "gamemodes/*/gamemode/**"
                ],
                "label": "Gamemodes",
                "path": [
                  "gamemodes"
                ],
                "rootDir": "gamemodes"
              }
            ]
          }
        },
        "templatePath": {
          "description": "Path to a folder containing custom GLua scaffolding templates (`.lua` files).\nBuilt-in templates are used as fallback when a custom one is not found.\nAccepts an absolute path or a path relative to the workspace root.",
          "type": [
            "string",
            "null"
          ]
        },
        "vgui": {
          "$ref": "#/$defs/EmmyrcGmodVgui",
          "default": {
            "codeLensEnabled": true,
            "inlayHintEnabled": false
          }
        }
      },
      "type": "object"
    },
    "EmmyrcGmodHookMappings": {
      "properties": {
        "emitterToHook": {
          "additionalProperties": {
            "type": "string"
          },
          "default": {},
          "type": "object"
        },
        "methodPrefixes": {
          "default": [],
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "methodToHook": {
          "additionalProperties": {
            "type": "string"
          },
          "default": {},
          "type": "object"
        }
      },
      "type": "object"
    },
    "EmmyrcGmodNetwork": {
      "properties": {
        "codeLensEnabled": {
          "default": true,
          "type": "boolean"
        },
        "completion": {
          "$ref": "#/$defs/EmmyrcGmodNetworkCompletion",
          "default": {
            "mismatchHints": true,
            "smartReadSuggestions": true
          }
        },
        "enabled": {
          "default": true,
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "EmmyrcGmodNetworkCompletion": {
      "properties": {
        "mismatchHints": {
          "default": true,
          "type": "boolean"
        },
        "smartReadSuggestions": {
          "default": true,
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "EmmyrcGmodOutline": {
      "properties": {
        "verbosity": {
          "$ref": "#/$defs/EmmyrcGmodOutlineVerbosity",
          "default": "normal",
          "description": "Controls how much detail the document outline shows.\n- `minimal`: functions, classes, hooks, net.Receive, timers, concommands only.\n- `normal` (default): same as minimal plus non-primitive variables and tables; hides\n  control-flow blocks.\n- `verbose`: everything including `if`, `for`, `do` blocks and all locals."
        }
      },
      "type": "object"
    },
    "EmmyrcGmodOutlineVerbosity": {
      "oneOf": [
        {
          "const": "minimal",
          "description": "Show only functions, classes, VGUI panels, hooks, net receivers, timers, concommands.",
          "type": "string"
        },
        {
          "const": "normal",
          "description": "Show functions, classes, important tables, hooks, net receivers, timers, concommands, and\nnon-primitive variables. Hides `if`/`for`/`do` blocks.",
          "type": "string"
        },
        {
          "const": "verbose",
          "description": "Show everything (legacy behavior, includes control-flow blocks and all locals).",
          "type": "string"
        }
      ]
    },
    "EmmyrcGmodRealm": {
      "enum": [
        "client",
        "server",
        "shared",
        "menu"
      ],
      "type": "string"
    },
    "EmmyrcGmodScriptedClassDefinition": {
      "properties": {
        "classGlobal": {
          "type": [
            "string",
            "null"
          ]
        },
        "classNamePrefix": {
          "description": "Optional prefix prepended to class names derived from the folder segment.\nFor example, gamemodes use `\"gamemode_\"` so a folder `sandbox` produces the\nclass name `gamemode_sandbox`, matching the runtime convention.",
          "type": [
            "string",
            "null"
          ]
        },
        "disabled": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "exclude": {
          "items": {
            "type": "string"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "icon": {
          "type": [
            "string",
            "null"
          ]
        },
        "id": {
          "type": "string"
        },
        "include": {
          "items": {
            "type": "string"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "label": {
          "type": [
            "string",
            "null"
          ]
        },
        "parentId": {
          "type": [
            "string",
            "null"
          ]
        },
        "path": {
          "items": {
            "type": "string"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "rootDir": {
          "type": [
            "string",
            "null"
          ]
        },
        "scaffold": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcGmodScriptedClassScaffold"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id"
      ],
      "type": "object"
    },
    "EmmyrcGmodScriptedClassScaffold": {
      "properties": {
        "files": {
          "default": [],
          "items": {
            "$ref": "#/$defs/EmmyrcGmodScriptedClassScaffoldFile"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "EmmyrcGmodScriptedClassScaffoldFile": {
      "properties": {
        "path": {
          "type": "string"
        },
        "template": {
          "type": "string"
        }
      },
      "required": [
        "path",
        "template"
      ],
      "type": "object"
    },
    "EmmyrcGmodScriptedClassScopeEntry": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "$ref": "#/$defs/EmmyrcGmodScriptedClassDefinition"
        }
      ]
    },
    "EmmyrcGmodScriptedClassScopes": {
      "properties": {
        "include": {
          "default": [
            {
              "classGlobal": "ENT",
              "icon": "folder-library",
              "id": "entities",
              "include": [
                "entities/**"
              ],
              "label": "Entities",
              "path": [
                "entities"
              ],
              "rootDir": "lua/entities",
              "scaffold": {
                "files": [
                  {
                    "path": "{{name}}/shared.lua",
                    "template": "ent_shared.lua"
                  },
                  {
                    "path": "{{name}}/init.lua",
                    "template": "ent_init.lua"
                  },
                  {
                    "path": "{{name}}/cl_init.lua",
                    "template": "ent_cl_init.lua"
                  }
                ]
              }
            },
            {
              "classGlobal": "SWEP",
              "exclude": [
                "weapons/gmod_tool/stools/**"
              ],
              "icon": "folder-library",
              "id": "weapons",
              "include": [
                "weapons/**"
              ],
              "label": "SWEPs",
              "path": [
                "weapons"
              ],
              "rootDir": "lua/weapons",
              "scaffold": {
                "files": [
                  {
                    "path": "{{name}}/shared.lua",
                    "template": "swep_shared.lua"
                  }
                ]
              }
            },
            {
              "classGlobal": "EFFECT",
              "icon": "folder-library",
              "id": "effects",
              "include": [
                "effects/**"
              ],
              "label": "Effects",
              "path": [
                "effects"
              ],
              "rootDir": "lua/effects",
              "scaffold": {
                "files": [
                  {
                    "path": "{{name}}.lua",
                    "template": "effect.lua"
                  }
                ]
              }
            },
            {
              "classGlobal": "TOOL",
              "icon": "tools",
              "id": "stools",
              "include": [
                "weapons/gmod_tool/stools/**",
                "weapons/gmod_tool/*.lua"
              ],
              "label": "STools",
              "parentId": "weapons",
              "path": [
                "weapons",
                "gmod_tool",
                "stools"
              ],
              "rootDir": "lua/weapons/gmod_tool/stools",
              "scaffold": {
                "files": [
                  {
                    "path": "{{name}}.lua",
                    "template": "tool.lua"
                  }
                ]
              }
            },
            {
              "classGlobal": "PLUGIN",
              "icon": "extensions",
              "id": "plugins",
              "include": [
                "plugins/**"
              ],
              "label": "Plugins",
              "path": [
                "plugins"
              ],
              "rootDir": "plugins"
            },
            {
              "classGlobal": "GM",
              "classNamePrefix": "gamemode_",
              "icon": "folder-library",
              "id": "gamemodes",
              "include": [
                "gamemodes/*/gamemode/**"
              ],
              "label": "Gamemodes",
              "path": [
                "gamemodes"
              ],
              "rootDir": "gamemodes"
            }
          ],
          "items": {
            "$ref": "#/$defs/EmmyrcGmodScriptedClassScopeEntry"
          },
          "type": "array",
          "x-gluals-editor": "scriptedClassTable"
        }
      },
      "type": "object"
    },
    "EmmyrcGmodVgui": {
      "properties": {
        "codeLensEnabled": {
          "default": true,
          "type": "boolean"
        },
        "inlayHintEnabled": {
          "default": false,
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "EmmyrcHover": {
      "properties": {
        "enable": {
          "default": true,
          "description": "Enable showing documentation on hover.",
          "type": "boolean",
          "x-vscode-setting": true
        }
      },
      "type": "object"
    },
    "EmmyrcInlayHint": {
      "properties": {
        "closingEndHint": {
          "default": true,
          "description": "Show an inlay hint after closing `end` keywords indicating what block\nthey belong to (e.g. function name). Only shown when the block spans\nat least `closingEndHintMinLines` lines.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "closingEndHintControlFlow": {
          "default": false,
          "description": "Also show closing `end` hints for control flow blocks (if, while, do,\nfor). Only effective when `closingEndHint` is enabled.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "closingEndHintMinLines": {
          "default": 15,
          "description": "Minimum number of lines a block must span before a closing `end` hint\nis shown.",
          "format": "uint32",
          "minimum": 0,
          "type": "integer",
          "x-vscode-setting": true
        },
        "enumParamHint": {
          "default": false,
          "description": "Show name of enumerator when passing a literal value to a function\nthat expects an enum.\n\nExample:\n\n```lua\n--- @enum Level\nlocal Foo = {\n   Info = 1,\n   Error = 2,\n}\n\n--- @param l Level\nfunction print_level(l) end\n\nprint_level(1 --[[ Hint: Level.Info ]])\n```",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "indexHint": {
          "default": true,
          "description": "Show named array indexes.\n\nExample:\n\n```lua\nlocal array = {\n   [1] = 1, -- [name]\n}\n\nprint(array[1] --[[ Hint: name ]])\n```",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "localHint": {
          "default": true,
          "description": "Show types of local variables.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "metaCallHint": {
          "default": true,
          "description": "Show hint when calling an object results in a call to\nits meta table's `__call` function.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "overrideHint": {
          "default": true,
          "description": "Show methods that override functions from base class.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "paramHint": {
          "default": true,
          "description": "Show parameter names in function calls and parameter types in function definitions.",
          "type": "boolean",
          "x-vscode-setting": true
        }
      },
      "type": "object"
    },
    "EmmyrcInlineValues": {
      "properties": {
        "enable": {
          "default": true,
          "description": "Show inline values during debug.",
          "type": "boolean",
          "x-vscode-setting": true
        }
      },
      "type": "object"
    },
    "EmmyrcLuaVersion": {
      "oneOf": [
        {
          "const": "Lua5.1",
          "description": "Lua 5.1",
          "type": "string"
        },
        {
          "const": "LuaJIT",
          "description": "LuaJIT",
          "type": "string"
        },
        {
          "const": "Lua5.2",
          "description": "Lua 5.2",
          "type": "string"
        },
        {
          "const": "Lua5.3",
          "description": "Lua 5.3",
          "type": "string"
        },
        {
          "const": "Lua5.4",
          "description": "Lua 5.4",
          "type": "string"
        },
        {
          "const": "Lua5.5",
          "description": "Lua 5.5",
          "type": "string"
        },
        {
          "const": "LuaLatest",
          "description": "Lua Latest",
          "type": "string"
        }
      ]
    },
    "EmmyrcNonStdSymbol": {
      "enum": [
        "//",
        "/**/",
        "`",
        "+=",
        "-=",
        "*=",
        "/=",
        "%=",
        "^=",
        "//=",
        "|=",
        "&=",
        "<<=",
        ">>=",
        "||",
        "&&",
        "!",
        "!=",
        "continue"
      ],
      "type": "string"
    },
    "EmmyrcReference": {
      "properties": {
        "enable": {
          "default": true,
          "description": "Enable searching for symbol usages.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "fuzzySearch": {
          "default": true,
          "description": "Use fuzzy search when searching for symbol usages\nand normal search didn't find anything.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "shortStringSearch": {
          "default": false,
          "description": "Also search for usages in strings.",
          "type": "boolean",
          "x-vscode-setting": true
        }
      },
      "type": "object"
    },
    "EmmyrcReformat": {
      "properties": {
        "configPrecedence": {
          "$ref": "#/$defs/EmmyrcFormatConfigPrecedence",
          "default": "preferEditorconfig",
          "description": "Controls which takes precedence when both `.editorconfig` and `.gluarc.json` formatter settings apply to the same option: `preferEditorconfig` (default) or `preferGluarc`.",
          "x-vscode-setting": true
        },
        "externalTool": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcExternalTool"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "External formatter tool configuration. When set, the specified program is used for formatting instead of the built-in formatter."
        },
        "externalToolRangeFormat": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcExternalTool"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "External formatter for range formatting. When set, range format requests use this tool instead of the built-in formatter."
        },
        "preset": {
          "$ref": "#/$defs/EmmyrcFormatPreset",
          "default": "default",
          "description": "Built-in formatter preset. `default` uses EmmyLuaCodeStyle defaults. `cfc` applies the CFC style preset. `custom` applies no preset — only the `styleOverrides` you configure below take effect.",
          "x-vscode-setting": true
        },
        "styleOverrides": {
          "anyOf": [
            {
              "$ref": "#/$defs/EmmyrcFormatStyleOverrides"
            },
            {
              "type": "null"
            }
          ],
          "description": "Per-key EmmyLuaCodeStyle style overrides applied on top of the selected preset. Keys not configured here inherit their value from the active preset.",
          "x-vscode-setting": true
        },
        "useDiff": {
          "default": false,
          "description": "Whether to use the diff algorithm for formatting.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "EmmyrcResource": {
      "properties": {
        "paths": {
          "default": [],
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "EmmyrcRuntime": {
      "properties": {
        "extensions": {
          "default": [],
          "description": "file Extensions. eg: .lua, .lua.txt",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "nonstandardSymbol": {
          "default": [],
          "description": "Non-standard symbols.",
          "items": {
            "$ref": "#/$defs/EmmyrcNonStdSymbol"
          },
          "type": "array"
        },
        "requireLikeFunction": {
          "default": [],
          "description": "Functions that like require.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "requirePattern": {
          "default": [],
          "description": "Require pattern. eg. \"?.lua\", \"?/init.lua\"",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "special": {
          "additionalProperties": {
            "$ref": "#/$defs/EmmyrcSpecialSymbol"
          },
          "default": {},
          "description": "Special symbols.",
          "type": "object"
        },
        "version": {
          "$ref": "#/$defs/EmmyrcLuaVersion",
          "default": "LuaJIT",
          "description": "Deprecated: GMod-only server always uses LuaJIT. Kept for config compatibility."
        }
      },
      "type": "object"
    },
    "EmmyrcSemanticToken": {
      "properties": {
        "enable": {
          "default": true,
          "description": "Enable semantic tokens.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "renderDocumentationMarkup": {
          "default": true,
          "description": "Render Markdown/RST in documentation. Set `doc.syntax` for this option to have effect.",
          "type": "boolean",
          "x-vscode-setting": true
        }
      },
      "type": "object"
    },
    "EmmyrcSpecialSymbol": {
      "enum": [
        "none",
        "require",
        "error",
        "assert",
        "type",
        "setmetatable"
      ],
      "type": "string"
    },
    "EmmyrcStrict": {
      "properties": {
        "allowNullableAsNonNullable": {
          "default": true,
          "description": "Allow nullable types (T?) to be passed where non-nullable (T) is expected.",
          "type": "boolean"
        },
        "arrayIndex": {
          "default": false,
          "description": "Whether to enable strict mode array indexing.",
          "type": "boolean"
        },
        "docBaseConstMatchBaseType": {
          "default": true,
          "description": "Base constant types defined in doc can match base types, allowing int to match `---@alias id 1|2|3`, same for string.",
          "type": "boolean"
        },
        "inferredTypeMismatch": {
          "default": false,
          "description": "Report type mismatch diagnostics for inferred values when strict mode is enabled.",
          "type": "boolean"
        },
        "metaOverrideFileDefine": {
          "default": true,
          "description": "meta define overrides file define",
          "type": "boolean"
        },
        "requireExportGlobal": {
          "default": false,
          "description": "This option limits the visibility of third-party libraries.\n\nWhen enabled, third-party libraries must use `---@export global` annotation to be importable (i.e., no diagnostic errors and visible in auto-import).",
          "type": "boolean"
        },
        "requirePath": {
          "default": false,
          "description": "Whether to enable strict mode require path.",
          "type": "boolean"
        },
        "strictTypeCoercion": {
          "default": false,
          "description": "When enabled, `param-type-mismatch` requires exact types and disables GLua-aware\nprimitive coercions. By default (disabled), the following are accepted:\n- `number`, `integer`, and `boolean` values where `string` is expected\n  (Lua's `tostring()` handles these cleanly).\n- String literals that are valid numbers (e.g. `\"2\"`) where `number` or `integer`\n  is expected (Lua's `tonumber()` handles these cleanly).",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "EmmyrcWorkspace": {
      "properties": {
        "enableIsolation": {
          "default": false,
          "description": "Whether multi-root workspaces should remain isolated.\n\nWhen false, workspace configs are merged into one global baseline\n(first workspace config wins scalar conflicts, arrays are unioned), while\nlocal workspace configs can still override file-scoped behavior.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "enableReindex": {
          "default": false,
          "description": "Enable full project reindex after changing a file.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "encoding": {
          "default": "utf-8",
          "description": "Encoding. eg: \"utf-8\"",
          "type": "string"
        },
        "ignoreDir": {
          "default": [],
          "description": "Ignore directories.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "ignoreDirDefaults": {
          "default": [
            {
              "glob": "**/gmod_wire_expression2/**",
              "id": "wire-expression2"
            },
            {
              "glob": "**/wire_expression*.lua",
              "id": "wire-expression-files"
            },
            {
              "glob": "**/tests/**",
              "id": "tests"
            },
            {
              "glob": "**/test/**",
              "id": "test"
            }
          ],
          "description": "Default directories/globs to ignore. Accepts strings (legacy, replaces built-ins) or\nobjects with `id`, optional `label`, `glob`, and `disabled`. Objects start from the\nbuilt-in list and apply overrides: `disabled: true` removes a built-in by id; a new id\nadds a custom default; an existing id with a `glob` changes the built-in's pattern.\nSet `useDefaultIgnores` to `false` to suppress all resolved defaults at runtime.",
          "items": {
            "$ref": "#/$defs/IgnoreDirDefaultEntry"
          },
          "type": "array"
        },
        "ignoreGlobs": {
          "default": [],
          "description": "Ignore globs. eg: [\"**/*.lua\"]",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "library": {
          "default": [],
          "description": "Library paths. Can be a string path or an object with path and ignore rules.\neg: [\"/usr/local/share/lua/5.1\"] or [{\"path\": \"/usr/local/share/lua/5.1\", \"ignoreDir\": [\"test\"], \"ignoreGlobs\": [\"**/*.spec.lua\"]}]",
          "items": {
            "$ref": "#/$defs/EmmyLibraryItem"
          },
          "type": "array"
        },
        "moduleMap": {
          "default": [],
          "description": "Module map. key is regex, value is new module regex\neg: {\n    \"^(.*)$\": \"module_$1\"\n    \"^lib(.*)$\": \"script$1\"\n}",
          "items": {
            "$ref": "#/$defs/EmmyrcWorkspaceModuleMap"
          },
          "type": "array"
        },
        "packageDirs": {
          "default": [],
          "description": "Package directories. Treat the parent directory as a `library`, but only add files from the specified directory.\neg: `/usr/local/share/lua/5.1/module`",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "reindexDuration": {
          "default": 5000,
          "description": "Delay between changing a file and full project reindex, in milliseconds.",
          "format": "uint64",
          "minimum": 0,
          "type": "integer",
          "x-vscode-setting": true
        },
        "useDefaultIgnores": {
          "default": true,
          "description": "Whether to apply default ignore directories. Set to false to disable\ndefault exclusions like E2 files and test directories.",
          "type": "boolean",
          "x-vscode-setting": true
        },
        "workspaceRoots": {
          "default": [],
          "description": "Workspace roots. eg: [\"src\", \"test\"]",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "EmmyrcWorkspaceModuleMap": {
      "properties": {
        "pattern": {
          "type": "string"
        },
        "replace": {
          "type": "string"
        }
      },
      "required": [
        "pattern",
        "replace"
      ],
      "type": "object"
    },
    "IgnoreDirDefaultDefinition": {
      "description": "Object form for `workspace.ignoreDirDefaults` entries.",
      "properties": {
        "disabled": {
          "description": "Set to `true` to remove this built-in default for the workspace.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "glob": {
          "description": "The glob pattern to apply. Omit when only using `disabled`.",
          "type": [
            "string",
            "null"
          ]
        },
        "id": {
          "description": "Stable identifier. Built-in ids: `\"wire-expression2\"`, `\"wire-expression-files\"`,\n`\"tests\"`, `\"test\"`. Custom ids can be any non-empty string.",
          "type": "string"
        },
        "label": {
          "description": "Optional human-readable label (informational only).",
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "id"
      ],
      "type": "object"
    },
    "IgnoreDirDefaultEntry": {
      "anyOf": [
        {
          "description": "Legacy string glob — when the whole list is pure strings, replaces built-ins entirely.",
          "type": "string"
        },
        {
          "$ref": "#/$defs/IgnoreDirDefaultDefinition",
          "description": "Object entry for granular override of built-in defaults."
        }
      ],
      "description": "An entry in `workspace.ignoreDirDefaults`. Accepts either a legacy glob string (backward\ncompatible) or an object that can override, disable, or add to the built-in default list."
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "$schema": {
      "type": [
        "string",
        "null"
      ]
    },
    "codeAction": {
      "$ref": "#/$defs/EmmyrcCodeAction",
      "default": {
        "insertSpace": false
      }
    },
    "codeLens": {
      "$ref": "#/$defs/EmmyrcCodeLens",
      "default": {
        "enable": true
      }
    },
    "completion": {
      "$ref": "#/$defs/EmmyrcCompletion",
      "default": {
        "autoRequire": true,
        "autoRequireFunction": "require",
        "autoRequireNamingConvention": "keep",
        "autoRequireSeparator": ".",
        "baseFunctionIncludesName": true,
        "callSnippet": true,
        "enable": true,
        "postfix": "@",
        "stagedCallSnippets": true
      }
    },
    "diagnostics": {
      "$ref": "#/$defs/EmmyrcDiagnostic",
      "default": {
        "diagnosticInterval": 500,
        "disable": [],
        "enable": true,
        "enables": [],
        "globals": [],
        "globalsRegex": [],
        "severity": {}
      }
    },
    "doc": {
      "$ref": "#/$defs/EmmyrcDoc",
      "default": {
        "knownTags": [],
        "privateName": [],
        "syntax": "md"
      }
    },
    "documentColor": {
      "$ref": "#/$defs/EmmyrcDocumentColor",
      "default": {
        "enable": true
      }
    },
    "format": {
      "$ref": "#/$defs/EmmyrcReformat",
      "default": {
        "configPrecedence": "preferEditorconfig",
        "externalTool": null,
        "externalToolRangeFormat": null,
        "preset": "default",
        "useDiff": false
      }
    },
    "gmod": {
      "$ref": "#/$defs/EmmyrcGmod",
      "default": {
        "defaultRealm": "shared",
        "dynamicFieldsGlobal": true,
        "enabled": true,
        "fileParamDefaults": {
          "ang": "Angle",
          "angle": "Angle",
          "attacker": "Entity",
          "cmd": "CUserCmd",
          "col": "Color",
          "color": "Color",
          "dmginfo": "CTakeDamageInfo",
          "ent": "Entity",
          "entity": "Entity",
          "func": "function",
          "inflictor": "Entity",
          "mat": "IMaterial",
          "npc": "NPC",
          "panel": "Panel",
          "phys": "PhysObj",
          "player": "Player",
          "ply": "Player",
          "pnl": "Panel",
          "pos": "Vector",
          "tr": "TraceResult",
          "trace": "TraceResult",
          "vec": "Vector",
          "veh": "Entity",
          "vehicle": "Entity",
          "victim": "Entity",
          "weapon": "Weapon",
          "wep": "Weapon"
        },
        "hookMappings": {
          "emitterToHook": {},
          "methodPrefixes": [],
          "methodToHook": {}
        },
        "inferDynamicFields": true,
        "network": {
          "codeLensEnabled": true,
          "completion": {
            "mismatchHints": true,
            "smartReadSuggestions": true
          },
          "enabled": true
        },
        "outline": {
          "verbosity": "normal"
        },
        "scriptedClassScopes": {
          "include": [
            {
              "classGlobal": "ENT",
              "icon": "folder-library",
              "id": "entities",
              "include": [
                "entities/**"
              ],
              "label": "Entities",
              "path": [
                "entities"
              ],
              "rootDir": "lua/entities",
              "scaffold": {
                "files": [
                  {
                    "path": "{{name}}/shared.lua",
                    "template": "ent_shared.lua"
                  },
                  {
                    "path": "{{name}}/init.lua",
                    "template": "ent_init.lua"
                  },
                  {
                    "path": "{{name}}/cl_init.lua",
                    "template": "ent_cl_init.lua"
                  }
                ]
              }
            },
            {
              "classGlobal": "SWEP",
              "exclude": [
                "weapons/gmod_tool/stools/**"
              ],
              "icon": "folder-library",
              "id": "weapons",
              "include": [
                "weapons/**"
              ],
              "label": "SWEPs",
              "path": [
                "weapons"
              ],
              "rootDir": "lua/weapons",
              "scaffold": {
                "files": [
                  {
                    "path": "{{name}}/shared.lua",
                    "template": "swep_shared.lua"
                  }
                ]
              }
            },
            {
              "classGlobal": "EFFECT",
              "icon": "folder-library",
              "id": "effects",
              "include": [
                "effects/**"
              ],
              "label": "Effects",
              "path": [
                "effects"
              ],
              "rootDir": "lua/effects",
              "scaffold": {
                "files": [
                  {
                    "path": "{{name}}.lua",
                    "template": "effect.lua"
                  }
                ]
              }
            },
            {
              "classGlobal": "TOOL",
              "icon": "tools",
              "id": "stools",
              "include": [
                "weapons/gmod_tool/stools/**",
                "weapons/gmod_tool/*.lua"
              ],
              "label": "STools",
              "parentId": "weapons",
              "path": [
                "weapons",
                "gmod_tool",
                "stools"
              ],
              "rootDir": "lua/weapons/gmod_tool/stools",
              "scaffold": {
                "files": [
                  {
                    "path": "{{name}}.lua",
                    "template": "tool.lua"
                  }
                ]
              }
            },
            {
              "classGlobal": "PLUGIN",
              "icon": "extensions",
              "id": "plugins",
              "include": [
                "plugins/**"
              ],
              "label": "Plugins",
              "path": [
                "plugins"
              ],
              "rootDir": "plugins"
            },
            {
              "classGlobal": "GM",
              "classNamePrefix": "gamemode_",
              "icon": "folder-library",
              "id": "gamemodes",
              "include": [
                "gamemodes/*/gamemode/**"
              ],
              "label": "Gamemodes",
              "path": [
                "gamemodes"
              ],
              "rootDir": "gamemodes"
            }
          ]
        },
        "vgui": {
          "codeLensEnabled": true,
          "inlayHintEnabled": false
        }
      }
    },
    "hint": {
      "$ref": "#/$defs/EmmyrcInlayHint",
      "default": {
        "closingEndHint": true,
        "closingEndHintControlFlow": false,
        "closingEndHintMinLines": 15,
        "enumParamHint": false,
        "indexHint": true,
        "localHint": true,
        "metaCallHint": true,
        "overrideHint": true,
        "paramHint": true
      }
    },
    "hover": {
      "$ref": "#/$defs/EmmyrcHover",
      "default": {
        "enable": true
      }
    },
    "inlineValues": {
      "$ref": "#/$defs/EmmyrcInlineValues",
      "default": {
        "enable": true
      }
    },
    "references": {
      "$ref": "#/$defs/EmmyrcReference",
      "default": {
        "enable": true,
        "fuzzySearch": true,
        "shortStringSearch": false
      }
    },
    "resource": {
      "$ref": "#/$defs/EmmyrcResource",
      "default": {
        "paths": []
      }
    },
    "runtime": {
      "$ref": "#/$defs/EmmyrcRuntime",
      "default": {
        "extensions": [],
        "nonstandardSymbol": [
          "//",
          "/**/",
          "continue",
          "!=",
          "||",
          "&&",
          "!"
        ],
        "requireLikeFunction": [],
        "requirePattern": [],
        "special": {},
        "version": "LuaJIT"
      }
    },
    "semanticTokens": {
      "$ref": "#/$defs/EmmyrcSemanticToken",
      "default": {
        "enable": true,
        "renderDocumentationMarkup": true
      }
    },
    "strict": {
      "$ref": "#/$defs/EmmyrcStrict",
      "default": {
        "allowNullableAsNonNullable": true,
        "arrayIndex": false,
        "docBaseConstMatchBaseType": true,
        "inferredTypeMismatch": false,
        "metaOverrideFileDefine": true,
        "requireExportGlobal": false,
        "requirePath": false,
        "strictTypeCoercion": false
      }
    },
    "workspace": {
      "$ref": "#/$defs/EmmyrcWorkspace",
      "default": {
        "enableIsolation": false,
        "enableReindex": false,
        "encoding": "utf-8",
        "ignoreDir": [],
        "ignoreDirDefaults": [
          {
            "glob": "**/gmod_wire_expression2/**",
            "id": "wire-expression2"
          },
          {
            "glob": "**/wire_expression*.lua",
            "id": "wire-expression-files"
          },
          {
            "glob": "**/tests/**",
            "id": "tests"
          },
          {
            "glob": "**/test/**",
            "id": "test"
          }
        ],
        "ignoreGlobs": [],
        "library": [],
        "moduleMap": [],
        "packageDirs": [],
        "reindexDuration": 5000,
        "useDefaultIgnores": true,
        "workspaceRoots": []
      }
    }
  },
  "title": "GLuaLS Configuration",
  "type": "object"
}
