UNPKG

pi-lens

Version:

Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo

235 lines (234 loc) • 6.86 kB
export const LANGUAGE_POLICY = { jsts: { lspCapable: true, startup: { defaults: ["typescript-language-server", "biome"], heavyScansRequireConfig: true, }, }, python: { lspCapable: true, startup: { defaults: ["pyright", "ruff"], }, }, go: { lspCapable: true }, rust: { lspCapable: true }, cxx: { lspCapable: true }, cmake: { lspCapable: true }, fish: { lspCapable: true }, shell: { lspCapable: true, startup: { defaults: ["shellcheck"] } }, json: { lspCapable: true }, markdown: { lspCapable: true }, css: { lspCapable: true }, yaml: { lspCapable: true, startup: { defaults: ["yamllint"], heavyScansRequireConfig: true, }, }, sql: { lspCapable: false, startup: { defaults: ["sqlfluff"], heavyScansRequireConfig: true, }, }, ruby: { lspCapable: true, startup: { defaults: ["rubocop"], heavyScansRequireConfig: true, }, }, html: { lspCapable: true }, docker: { lspCapable: true }, php: { lspCapable: true }, powershell: { lspCapable: true }, prisma: { lspCapable: true }, csharp: { lspCapable: true }, fsharp: { lspCapable: true }, java: { lspCapable: true }, kotlin: { lspCapable: true, startup: { defaults: ["ktlint"] } }, swift: { lspCapable: true }, dart: { lspCapable: true }, lua: { lspCapable: true }, zig: { lspCapable: true }, haskell: { lspCapable: true }, elixir: { lspCapable: true }, gleam: { lspCapable: true }, ocaml: { lspCapable: true }, clojure: { lspCapable: true }, terraform: { lspCapable: true }, nix: { lspCapable: true }, toml: { lspCapable: true, startup: { defaults: ["taplo"] } }, }; const PRIMARY_DISPATCH_GROUPS = { jsts: { mode: "fallback", runnerIds: ["lsp"], filterKinds: ["jsts"], }, python: { mode: "all", runnerIds: ["lsp", "pyright"], filterKinds: ["python"], }, go: { mode: "all", runnerIds: ["lsp", "go-vet"], filterKinds: ["go"] }, rust: { mode: "all", runnerIds: ["lsp", "rust-clippy"], filterKinds: ["rust"], }, ruby: { mode: "all", runnerIds: ["lsp", "rubocop"], filterKinds: ["ruby"], }, cxx: { mode: "all", runnerIds: ["lsp", "cpp-check"], filterKinds: ["cxx"], }, cmake: { mode: "fallback", runnerIds: ["lsp"], filterKinds: ["cmake"] }, fish: { mode: "all", runnerIds: ["lsp", "fish-indent"], filterKinds: ["fish"], }, shell: { mode: "all", runnerIds: ["lsp", "shellcheck"], filterKinds: ["shell"], }, json: { mode: "fallback", runnerIds: ["lsp"], filterKinds: ["json"] }, markdown: { // marksman (primary LSP) adds cross-file checks the cold spellcheck/vale // runners can't see; all three run so prose + structural coverage coexist. mode: "all", runnerIds: ["lsp", "spellcheck", "vale"], filterKinds: ["markdown"], }, css: { mode: "all", runnerIds: ["lsp", "stylelint"], filterKinds: ["css"], }, yaml: { mode: "all", runnerIds: ["lsp", "yamllint", "trivy-config"], filterKinds: ["yaml"], }, sql: { mode: "fallback", runnerIds: ["sqlfluff"], filterKinds: ["sql"], }, html: { mode: "all", runnerIds: ["lsp", "htmlhint"], filterKinds: ["html"], }, docker: { mode: "all", runnerIds: ["lsp", "hadolint", "trivy-config"], filterKinds: ["docker"], }, php: { mode: "fallback", runnerIds: ["lsp", "php-lint", "phpstan"], filterKinds: ["php"], }, powershell: { mode: "all", runnerIds: ["lsp", "psscriptanalyzer"], filterKinds: ["powershell"], }, prisma: { mode: "all", runnerIds: ["lsp", "prisma-validate"], filterKinds: ["prisma"], }, csharp: { mode: "fallback", runnerIds: ["lsp", "dotnet-build"], filterKinds: ["csharp"], }, fsharp: { mode: "fallback", runnerIds: ["lsp"], filterKinds: ["fsharp"] }, java: { mode: "fallback", runnerIds: ["lsp", "javac"], filterKinds: ["java"], }, kotlin: { mode: "all", runnerIds: ["lsp", "ktlint"], filterKinds: ["kotlin"], }, swift: { mode: "all", runnerIds: ["lsp", "swiftlint"], filterKinds: ["swift"], }, dart: { mode: "all", runnerIds: ["lsp", "dart-analyze"], filterKinds: ["dart"], }, lua: { mode: "fallback", runnerIds: ["lsp"], filterKinds: ["lua"] }, zig: { mode: "all", runnerIds: ["lsp", "zig-check"], filterKinds: ["zig"] }, haskell: { mode: "fallback", runnerIds: ["lsp"], filterKinds: ["haskell"] }, elixir: { mode: "all", runnerIds: ["lsp", "elixir-check", "credo"], filterKinds: ["elixir"], }, gleam: { mode: "all", runnerIds: ["lsp", "gleam-check"], filterKinds: ["gleam"], }, ocaml: { mode: "fallback", runnerIds: ["lsp"], filterKinds: ["ocaml"] }, clojure: { mode: "fallback", runnerIds: ["lsp"], filterKinds: ["clojure"] }, terraform: { mode: "all", runnerIds: ["lsp", "tflint"], filterKinds: ["terraform"], }, nix: { mode: "fallback", runnerIds: ["lsp"], filterKinds: ["nix"] }, toml: { mode: "all", runnerIds: ["lsp", "taplo"], filterKinds: ["toml"], }, }; export function getLspCapableKinds() { return Object.keys(LANGUAGE_POLICY).filter((kind) => LANGUAGE_POLICY[kind].lspCapable); } export function getPrimaryDispatchGroup(kind, lspEnabled) { const base = PRIMARY_DISPATCH_GROUPS[kind]; if (!base) return undefined; const ids = lspEnabled ? [...base.runnerIds] : base.runnerIds.filter((id) => id !== "lsp"); if (ids.length === 0) return undefined; return { mode: base.mode, runnerIds: ids, filterKinds: base.filterKinds, semantic: base.semantic, }; } // Note: getStartupDefaultsForProfile has been moved to language-profile.ts as getDefaultStartupTools // Import from there if needed: import { getDefaultStartupTools } from "./language-profile.js" export function canRunStartupHeavyScans(profile, kind) { if (!profile.present[kind]) return false; const needsConfig = LANGUAGE_POLICY[kind].startup?.heavyScansRequireConfig; if (!needsConfig) return true; return !!profile.configured[kind]; }