From 1d09e75d0ffe02da406d8edac716118a756296ac Mon Sep 17 00:00:00 2001 From: Matt Leong Date: Mon, 20 Dec 2021 16:44:02 -0800 Subject: [PATCH] feat(lsp): jsonls schemas --- lua/cosmic/config/init.lua | 3 + lua/cosmic/lsp/providers/init.lua | 2 + lua/cosmic/lsp/providers/jsonls.lua | 182 ++++++++++++++++++++++++++++ 3 files changed, 187 insertions(+) create mode 100644 lua/cosmic/lsp/providers/jsonls.lua diff --git a/lua/cosmic/config/init.lua b/lua/cosmic/config/init.lua index 07e18ed..13478cc 100644 --- a/lua/cosmic/config/init.lua +++ b/lua/cosmic/config/init.lua @@ -23,6 +23,9 @@ local default_config = { opts = {} }, ]] + jsonls = { + format = false, + }, sumneko_lua = { format = false, -- disable formatting all together }, diff --git a/lua/cosmic/lsp/providers/init.lua b/lua/cosmic/lsp/providers/init.lua index c3ad9eb..a988723 100644 --- a/lua/cosmic/lsp/providers/init.lua +++ b/lua/cosmic/lsp/providers/init.lua @@ -55,6 +55,8 @@ lsp_installer.on_server_ready(function(server) -- set up default cosmic options if server.name == 'tsserver' then opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.tsserver')) + elseif server.name == 'jsonls' then + opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.jsonls')) elseif server.name == 'sumneko_lua' then opts = vim.tbl_deep_extend('force', opts, require('cosmic.lsp.providers.sumneko_lua')) end diff --git a/lua/cosmic/lsp/providers/jsonls.lua b/lua/cosmic/lsp/providers/jsonls.lua new file mode 100644 index 0000000..b3140c3 --- /dev/null +++ b/lua/cosmic/lsp/providers/jsonls.lua @@ -0,0 +1,182 @@ +local schemas = { + { + description = 'TypeScript compiler configuration file', + fileMatch = { + 'tsconfig.json', + 'tsconfig.*.json', + }, + url = 'https://json.schemastore.org/tsconfig.json', + }, + { + description = 'Lerna config', + fileMatch = { 'lerna.json' }, + url = 'https://json.schemastore.org/lerna.json', + }, + { + description = 'Babel configuration', + fileMatch = { + '.babelrc.json', + '.babelrc', + 'babel.config.json', + }, + url = 'https://json.schemastore.org/babelrc.json', + }, + { + description = 'ESLint config', + fileMatch = { + '.eslintrc.json', + '.eslintrc', + }, + url = 'https://json.schemastore.org/eslintrc.json', + }, + { + description = 'Bucklescript config', + fileMatch = { 'bsconfig.json' }, + url = 'https://raw.githubusercontent.com/rescript-lang/rescript-compiler/8.2.0/docs/docson/build-schema.json', + }, + { + description = 'Prettier config', + fileMatch = { + '.prettierrc', + '.prettierrc.json', + 'prettier.config.json', + }, + url = 'https://json.schemastore.org/prettierrc', + }, + { + description = 'Vercel Now config', + fileMatch = { 'now.json' }, + url = 'https://json.schemastore.org/now', + }, + { + description = 'Stylelint config', + fileMatch = { + '.stylelintrc', + '.stylelintrc.json', + 'stylelint.config.json', + }, + url = 'https://json.schemastore.org/stylelintrc', + }, + { + description = 'A JSON schema for the ASP.NET LaunchSettings.json files', + fileMatch = { 'launchsettings.json' }, + url = 'https://json.schemastore.org/launchsettings.json', + }, + { + description = 'Schema for CMake Presets', + fileMatch = { + 'CMakePresets.json', + 'CMakeUserPresets.json', + }, + url = 'https://raw.githubusercontent.com/Kitware/CMake/master/Help/manual/presets/schema.json', + }, + { + description = 'Configuration file as an alternative for configuring your repository in the settings page.', + fileMatch = { + '.codeclimate.json', + }, + url = 'https://json.schemastore.org/codeclimate.json', + }, + { + description = 'LLVM compilation database', + fileMatch = { + 'compile_commands.json', + }, + url = 'https://json.schemastore.org/compile-commands.json', + }, + { + description = 'Config file for Command Task Runner', + fileMatch = { + 'commands.json', + }, + url = 'https://json.schemastore.org/commands.json', + }, + { + description = 'AWS CloudFormation provides a common language for you to describe and provision all the infrastructure resources in your cloud environment.', + fileMatch = { + '*.cf.json', + 'cloudformation.json', + }, + url = 'https://raw.githubusercontent.com/awslabs/goformation/v5.2.9/schema/cloudformation.schema.json', + }, + { + description = 'The AWS Serverless Application Model (AWS SAM, previously known as Project Flourish) extends AWS CloudFormation to provide a simplified way of defining the Amazon API Gateway APIs, AWS Lambda functions, and Amazon DynamoDB tables needed by your serverless application.', + fileMatch = { + 'serverless.template', + '*.sam.json', + 'sam.json', + }, + url = 'https://raw.githubusercontent.com/awslabs/goformation/v5.2.9/schema/sam.schema.json', + }, + { + description = 'Json schema for properties json file for a GitHub Workflow template', + fileMatch = { + '.github/workflow-templates/**.properties.json', + }, + url = 'https://json.schemastore.org/github-workflow-template-properties.json', + }, + { + description = 'golangci-lint configuration file', + fileMatch = { + '.golangci.toml', + '.golangci.json', + }, + url = 'https://json.schemastore.org/golangci-lint.json', + }, + { + description = 'JSON schema for the JSON Feed format', + fileMatch = { + 'feed.json', + }, + url = 'https://json.schemastore.org/feed.json', + versions = { + ['1'] = 'https://json.schemastore.org/feed-1.json', + ['1.1'] = 'https://json.schemastore.org/feed.json', + }, + }, + { + description = 'Packer template JSON configuration', + fileMatch = { + 'packer.json', + }, + url = 'https://json.schemastore.org/packer.json', + }, + { + description = 'NPM configuration file', + fileMatch = { + 'package.json', + }, + url = 'https://json.schemastore.org/package.json', + }, + { + description = 'JSON schema for Visual Studio component configuration files', + fileMatch = { + '*.vsconfig', + }, + url = 'https://json.schemastore.org/vsconfig.json', + }, + { + description = 'Resume json', + fileMatch = { 'resume.json' }, + url = 'https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json', + }, +} + +local opts = { + settings = { + json = { + schemas = schemas, + }, + }, + setup = { + commands = { + Format = { + function() + vim.lsp.buf.range_formatting({}, { 0, 0 }, { vim.fn.line('$'), 0 }) + end, + }, + }, + }, +} + +return opts