{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "https://json.schemastore.org/omnisharp.json",
  "properties": {
    "FormattingOptions": {
      "type": "object",
      "description": "Used to control C# formatting",
      "properties": {
        "EnableEditorConfigSupport": {
          "type": "boolean",
          "default": false
        },
        "NewLine": {
          "type": "string",
          "default": "\n"
        },
        "UseTabs": {
          "type": "boolean",
          "default": false
        },
        "TabSize": {
          "type": "integer",
          "default": 4
        },
        "IndentationSize": {
          "type": "integer",
          "default": 4
        },
        "SpacingAfterMethodDeclarationName": {
          "type": "boolean",
          "default": false
        },
        "SpaceWithinMethodDeclarationParenthesis": {
          "type": "boolean",
          "default": false
        },
        "SpaceBetweenEmptyMethodDeclarationParentheses": {
          "type": "boolean",
          "default": false
        },
        "SpaceAfterMethodCallName": {
          "type": "boolean",
          "default": false
        },
        "SpaceWithinMethodCallParentheses": {
          "type": "boolean",
          "default": false
        },
        "SpaceBetweenEmptyMethodCallParentheses": {
          "type": "boolean",
          "default": false
        },
        "SpaceAfterControlFlowStatementKeyword": {
          "type": "boolean",
          "default": true
        },
        "SpaceWithinExpressionParentheses": {
          "type": "boolean",
          "default": false
        },
        "SpaceWithinCastParentheses": {
          "type": "boolean",
          "default": false
        },
        "SpaceWithinOtherParentheses": {
          "type": "boolean",
          "default": false
        },
        "SpaceAfterCast": {
          "type": "boolean",
          "default": false
        },
        "SpacesIgnoreAroundVariableDeclaration": {
          "type": "boolean",
          "default": false
        },
        "SpaceBeforeOpenSquareBracket": {
          "type": "boolean",
          "default": false
        },
        "SpaceBetweenEmptySquareBrackets": {
          "type": "boolean",
          "default": false
        },
        "SpaceWithinSquareBrackets": {
          "type": "boolean",
          "default": false
        },
        "SpaceAfterColonInBaseTypeDeclaration": {
          "type": "boolean",
          "default": true
        },
        "SpaceAfterComma": {
          "type": "boolean",
          "default": true
        },
        "SpaceAfterDot": {
          "type": "boolean",
          "default": false
        },
        "SpaceAfterSemicolonsInForStatement": {
          "type": "boolean",
          "default": true
        },
        "SpaceBeforeColonInBaseTypeDeclaration": {
          "type": "boolean",
          "default": true
        },
        "SpaceBeforeComma": {
          "type": "boolean",
          "default": false
        },
        "SpaceBeforeDot": {
          "type": "boolean",
          "default": false
        },
        "SpaceBeforeSemicolonsInForStatement": {
          "type": "boolean",
          "default": false
        },
        "SpacingAroundBinaryOperator": {
          "type": "string",
          "default": "single"
        },
        "IndentBraces": {
          "type": "boolean",
          "default": false
        },
        "IndentBlock": {
          "type": "boolean",
          "default": true
        },
        "IndentSwitchSection": {
          "type": "boolean",
          "default": true
        },
        "IndentSwitchCaseSection": {
          "type": "boolean",
          "default": true
        },
        "IndentSwitchCaseSectionWhenBlock": {
          "type": "boolean",
          "default": true
        },
        "LabelPositioning": {
          "type": "string",
          "default": "oneLess"
        },
        "WrappingPreserveSingleLine": {
          "type": "boolean",
          "default": true
        },
        "WrappingKeepStatementsOnSingleLine": {
          "type": "boolean",
          "default": true
        },
        "NewLinesForBracesInTypes": {
          "type": "boolean",
          "default": true
        },
        "NewLinesForBracesInMethods": {
          "type": "boolean",
          "default": true
        },
        "NewLinesForBracesInProperties": {
          "type": "boolean",
          "default": true
        },
        "NewLinesForBracesInAccessors": {
          "type": "boolean",
          "default": true
        },
        "NewLinesForBracesInAnonymousMethods": {
          "type": "boolean",
          "default": true
        },
        "NewLinesForBracesInControlBlocks": {
          "type": "boolean",
          "default": true
        },
        "NewLinesForBracesInAnonymousTypes": {
          "type": "boolean",
          "default": true
        },
        "NewLinesForBracesInObjectCollectionArrayInitializers": {
          "type": "boolean",
          "default": true
        },
        "NewLinesForBracesInLambdaExpressionBody": {
          "type": "boolean",
          "default": true
        },
        "NewLineForElse": {
          "type": "boolean",
          "default": true
        },
        "NewLineForCatch": {
          "type": "boolean",
          "default": true
        },
        "NewLineForFinally": {
          "type": "boolean",
          "default": true
        },
        "NewLineForMembersInObjectInit": {
          "type": "boolean",
          "default": true
        },
        "NewLineForMembersInAnonymousTypes": {
          "type": "boolean",
          "default": true
        },
        "NewLineForClausesInQuery": {
          "type": "boolean",
          "default": true
        }
      }
    },
    "RoslynExtensionsOptions": {
      "type": "object",
      "description": "Used to define refactorings, code actions and analyzer locations that OmniSharp should use (i.e. Roslynator)",
      "properties": {
        "EnableDecompilationSupport": {
          "type": "boolean",
          "default": false
        },
        "EnableAnalyzersSupport": {
          "type": "boolean",
          "description": "If set to false, only refactorings are available",
          "default": false
        },
        "DocumentAnalysisTimeoutMs": {
          "type": "integer",
          "default": 10000
        },
        "LocationPaths": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "default": null
        }
      }
    },
    "FileOptions": {
      "type": "object",
      "description": "Used to define which directories and files should be included in OmniSharp's project file / solution file discovery process. Not individual .cs files.",
      "properties": {
        "SystemExcludeSearchPatterns": {
          "type": "array",
          "description": "Recommended for manual editing",
          "items": {
            "type": "string"
          },
          "default": [
            "**/node_modules/**/*",
            "**/bin/**/*",
            "**/obj/**/*",
            "**/.git/**/*"
          ]
        },
        "ExcludeSearchPatterns": {
          "type": "array",
          "description": "Can be used by tools such as VS Code to automatically share its exclusion settings with OmniSharp",
          "items": {
            "type": "string"
          },
          "default": []
        }
      }
    },
    "RenameOptions": {
      "type": "object",
      "properties": {
        "RenameOverloads": {
          "type": "boolean",
          "default": false
        },
        "RenameInStrings": {
          "type": "boolean",
          "default": false
        },
        "RenameInComments": {
          "type": "boolean",
          "default": false
        }
      }
    },
    "ImplementTypeOptions": {
      "type": "object",
      "properties": {
        "InsertionBehavior": {
          "type": "string",
          "enum": ["WithOtherMembersOfTheSameKind", "AtTheEnd"],
          "default": "WithOtherMembersOfTheSameKind"
        },
        "PropertyGenerationBehavior": {
          "type": "string",
          "enum": ["PreferThrowingProperties", "PreferAutoProperties"],
          "default": "PreferThrowingProperties"
        }
      }
    },
    "Plugins": {
      "type": "object",
      "properties": {
        "LocationPaths": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "default": []
        }
      }
    },
    "msbuild": {
      "type": "object",
      "description": "Used to configure MSBuild solutions and projects",
      "properties": {
        "enabled": {
          "type": "boolean",
          "default": true
        },
        "ToolsVersion": {
          "type": "string",
          "default": null,
          "description": "Value of ToolsVersion to use when building projects passed to this task",
          "anyOf": [
            {
              "enum": ["Current", "2.0", "3.5", "4.0", "15.0"]
            },
            {
              "type": "string"
            }
          ]
        },
        "VisualStudioVersion": {
          "type": "string",
          "default": null
        },
        "Configuration": {
          "default": null,
          "description": "Build configuration used for project evaluation",
          "anyOf": [
            {
              "enum": ["Debug", "Release"]
            },
            {
              "type": "string"
            }
          ]
        },
        "Platform": {
          "default": "AnyCPU",
          "description": "Specifies which version of the Common Language Runtime (CLR) use for project evaluation",
          "anyOf": [
            {
              "enum": ["AnyCPU", "x86", "x64", "ARM", "ARM64", "Itanium"]
            },
            {
              "type": "string"
            }
          ]
        },
        "EnablePackageAutoRestore": {
          "type": "boolean",
          "default": false
        },
        "MSBuildExtensionsPath": {
          "type": "string",
          "description": "MSBuild extensions path. On Standalone this defaults to the MSBuild folder. In VisualStudio mode this folder will be %VSINSTALLDIR%\\MSBuild",
          "default": null
        },
        "TargetFrameworkRootPath": {
          "type": "string",
          "description": "Root directory where the target framework will be looked for. Uses default path if this is null",
          "default": null
        },
        "MSBuildSDKsPath": {
          "type": "string",
          "description": "Path to the Sdks folder for this MSBuild instance",
          "default": null
        },
        "RoslynTargetsPath": {
          "type": "string",
          "default": null
        },
        "CscToolPath": {
          "type": "string",
          "description": "Local Roslyn path (e.g. <MSBuildPath>/Current/Bin/Roslyn)",
          "default": null
        },
        "CscToolExe": {
          "type": "string",
          "description": "FileName of C# compiler",
          "default": "csc.exe"
        },
        "loadProjectsOnDemand": {
          "type": "boolean",
          "description": "If true, MSBuild project system will only be loading projects for files that were opened in the editor as well as referenced projects, recursively",
          "default": false
        }
      }
    },
    "script": {
      "type": "object",
      "description": "Used to configure C# scripting (CSX files)",
      "properties": {
        "enabled": {
          "type": "boolean",
          "default": true
        },
        "defaultTargetFramework": {
          "type": "string",
          "default": "net461",
          "anyOf": [
            {
              "enum": [
                "netstandard1.0",
                "netstandard1.1",
                "netstandard1.2",
                "netstandard1.3",
                "netstandard1.4",
                "netstandard1.5",
                "netstandard1.6",
                "netstandard2.0",
                "netstandard2.1",
                "netcoreapp1.0",
                "netcoreapp1.1",
                "netcoreapp2.0",
                "netcoreapp2.1",
                "netcoreapp2.2",
                "netcoreapp3.0",
                "netcoreapp3.1",
                "net11",
                "net20",
                "net35",
                "net40",
                "net403",
                "net45",
                "net451",
                "net452",
                "net46",
                "net461",
                "net462",
                "net47",
                "net471",
                "net472",
                "net48"
              ]
            },
            {
              "type": "string"
            }
          ]
        },
        "enableScriptNuGetReferences": {
          "type": "boolean",
          "default": false
        },
        "rspFilePath": {
          "type": "string",
          "default": "",
          "description": "A response file (.rsp) is used to provide the command line arguments that are used to run the roslyn script compiler process. You can use this to override the default namespace includes among other things."
        }
      }
    },
    "cake": {
      "type": "object",
      "description": "Used to configure Cake (cake files)",
      "properties": {
        "enabled": {
          "type": "boolean",
          "default": true
        },
        "bakeryPath": {
          "type": "string",
          "default": null
        }
      }
    }
  },
  "type": "object"
}
