@prisma/language-server
Version:
Prisma Language Server
97 lines • 4.77 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const vitest_1 = require("vitest");
const vscode_languageserver_1 = require("vscode-languageserver");
const MessageHandler_1 = require("../../lib/MessageHandler");
const Schema_1 = require("../../lib/Schema");
const constants_1 = require("../../lib/constants");
const listAllAvailablePreviewFeatures_1 = __importDefault(require("../../lib/prisma-schema-wasm/listAllAvailablePreviewFeatures"));
const helper_1 = require("../helper");
function assertLinting(expected, fixturePath) {
const document = (0, helper_1.getTextDocument)(fixturePath);
const diagnosticsResults = (0, MessageHandler_1.handleDiagnosticsRequest)(Schema_1.PrismaSchema.singleFile(document)).get(document.uri);
(0, vitest_1.expect)(diagnosticsResults.length).toBeGreaterThan(0);
expected.forEach((expectedDiagnostic, i) => {
const actualDiagnostic = diagnosticsResults[i];
(0, vitest_1.expect)(actualDiagnostic.message).toStrictEqual(expectedDiagnostic.message);
(0, vitest_1.expect)(actualDiagnostic.range).toStrictEqual(expectedDiagnostic.range);
(0, vitest_1.expect)(actualDiagnostic.severity).toStrictEqual(expectedDiagnostic.severity);
(0, vitest_1.expect)(actualDiagnostic.tags).toStrictEqual(expectedDiagnostic.tags);
});
}
(0, vitest_1.describe)('Linting', () => {
const getFixturePath = (testName) => `./linting/${testName}.prisma`;
(0, vitest_1.test)('Missing argument', () => {
const fixturePath = getFixturePath('missingArgument');
assertLinting([
{
message: 'Argument "provider" is missing in data source block "db".',
range: {
start: { line: 0, character: 0 },
end: { line: 2, character: 1 },
},
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
},
], fixturePath);
});
(0, vitest_1.test)('Wrong type', () => {
const fixturePath = getFixturePath('wrongType');
assertLinting([
{
message: 'Type "Use" is neither a built-in type, nor refers to another model, composite type, or enum.',
range: {
start: { line: 14, character: 12 },
end: { line: 14, character: 15 },
},
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
},
], fixturePath);
});
(0, vitest_1.test)('@ignore : Field', () => {
const fixturePath = getFixturePath('@ignore');
assertLinting([
{
range: {
start: { line: 12, character: 0 },
end: { line: 12, character: constants_1.MAX_SAFE_VALUE_i32 },
},
message: '@ignore: When using Prisma Migrate, this field will be kept in sync with the database schema, however, it will not be exposed in Prisma Client.',
tags: [vscode_languageserver_1.DiagnosticTag.Unnecessary],
severity: vscode_languageserver_1.DiagnosticSeverity.Hint,
},
], fixturePath);
});
(0, vitest_1.test)('@@ignore : Model', () => {
const fixturePath = getFixturePath('@@ignore');
assertLinting([
{
range: {
start: { line: 9, character: 0 },
end: { line: 17, character: 1 },
},
message: '@@ignore: When using Prisma Migrate, this model will be kept in sync with the database schema, however, it will not be exposed in Prisma Client.',
tags: [vscode_languageserver_1.DiagnosticTag.Unnecessary],
severity: vscode_languageserver_1.DiagnosticSeverity.Hint,
},
], fixturePath);
});
(0, vitest_1.test)('Unknown previewFeature', () => {
const fixturePath = getFixturePath('unknownPreview');
const previewFeatures = (0, listAllAvailablePreviewFeatures_1.default)();
assertLinting([
{
message: `The preview feature "huh" is not known. Expected one of: ${previewFeatures.join(', ')}.
If this is unexpected, it might be due to your editor's Prisma Extension being out of date.`,
range: {
start: { line: 2, character: 22 },
end: { line: 2, character: 29 },
},
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
},
], fixturePath);
});
});
//# sourceMappingURL=single-file.test.js.map