Skip to content

Commit

Permalink
wip: try to fix issue with esm/cjs module interrop
Browse files Browse the repository at this point in the history
  • Loading branch information
EmileRolley committed Apr 22, 2024
1 parent 01e5094 commit e97672a
Show file tree
Hide file tree
Showing 8 changed files with 187 additions and 171 deletions.
200 changes: 100 additions & 100 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,102 +1,102 @@
{
"name": "publicodes-language-server",
"description": "Publicodes language toolkit",
"displayName": "Publicodes language",
"icon": "icons/publicodes-logo.png",
"author": "Emile Rolley <[email protected]>",
"license": "MIT",
"version": "0.4.1",
"publisher": "EmileRolley",
"repository": {
"type": "git",
"url": "https://github.com/EmileRolley/publicodes-language-server.git"
},
"categories": [],
"keywords": [
"publicodes",
"language server",
"vscode"
],
"engines": {
"vscode": "^1.75.0"
},
"main": "./client/out/extension",
"contributes": {
"languages": [
{
"id": "publicodes",
"aliases": [
"Publicodes"
],
"extensions": [
".publi.yml",
".publicodes.yml",
".publi.yaml",
".publicodes.yaml",
".publi",
".publicodes"
],
"configuration": "./language-configuration.json",
"icon": {
"light": "./icons/publicodes-logo.png",
"dark": "./icons/publicodes-logo.png"
}
}
],
"grammars": [
{
"language": "publicodes",
"scopeName": "source.publicodes",
"path": "./syntaxes/publicodes.tmLanguage.json"
}
],
"configurationDefaults": {
"[publicodes]": {
"editor.insertSpaces": true,
"editor.tabSize": 2,
"editor.autoIndent": "advanced",
"diffEditor.ignoreTrimWhitespace": false
}
},
"configuration": {
"type": "object",
"title": "Example configuration",
"properties": {
"languageServerExample.maxNumberOfProblems": {
"scope": "resource",
"type": "number",
"default": 100,
"description": "Controls the maximum number of problems produced by the server."
},
"languageServerExample.trace.server": {
"scope": "window",
"type": "string",
"enum": [
"off",
"messages",
"verbose"
],
"default": "off",
"description": "Traces the communication between VS Code and the language server."
}
}
}
},
"scripts": {
"vscode:prepublish": "npm run compile",
"compile": "tsc -b",
"watch": "tsc -b -w",
"lint": "eslint ./client/src ./server/src --ext .ts,.tsx",
"postinstall": "cd client && npm install && cd ../server && npm install && cd ..",
"test": "sh ./scripts/e2e.sh"
},
"devDependencies": {
"@types/mocha": "^9.1.0",
"@types/node": "^16.11.7",
"@typescript-eslint/eslint-plugin": "^5.54.0",
"@typescript-eslint/parser": "^5.54.0",
"eslint": "^8.35.0",
"mocha": "^9.2.1",
"typescript": "^5.0.2"
}
"name": "publicodes-language-server",
"description": "Publicodes language toolkit",
"displayName": "Publicodes language",
"icon": "icons/publicodes-logo.png",
"author": "Emile Rolley <[email protected]>",
"license": "MIT",
"version": "0.4.1",
"publisher": "EmileRolley",
"repository": {
"type": "git",
"url": "https://github.com/EmileRolley/publicodes-language-server.git"
},
"categories": [],
"keywords": [
"publicodes",
"language server",
"vscode"
],
"engines": {
"vscode": "^1.75.0"
},
"main": "./client/out/extension",
"contributes": {
"languages": [
{
"id": "publicodes",
"aliases": [
"Publicodes"
],
"extensions": [
".publi.yml",
".publicodes.yml",
".publi.yaml",
".publicodes.yaml",
".publi",
".publicodes"
],
"configuration": "./language-configuration.json",
"icon": {
"light": "./icons/publicodes-logo.png",
"dark": "./icons/publicodes-logo.png"
}
}
],
"grammars": [
{
"language": "publicodes",
"scopeName": "source.publicodes",
"path": "./syntaxes/publicodes.tmLanguage.json"
}
],
"configurationDefaults": {
"[publicodes]": {
"editor.insertSpaces": true,
"editor.tabSize": 2,
"editor.autoIndent": "advanced",
"diffEditor.ignoreTrimWhitespace": false
}
},
"configuration": {
"type": "object",
"title": "Example configuration",
"properties": {
"languageServerExample.maxNumberOfProblems": {
"scope": "resource",
"type": "number",
"default": 100,
"description": "Controls the maximum number of problems produced by the server."
},
"languageServerExample.trace.server": {
"scope": "window",
"type": "string",
"enum": [
"off",
"messages",
"verbose"
],
"default": "off",
"description": "Traces the communication between VS Code and the language server."
}
}
}
},
"scripts": {
"vscode:prepublish": "npm run compile",
"compile": "tsc -b",
"watch": "tsc -b -w",
"lint": "eslint ./client/src ./server/src --ext .ts,.tsx",
"postinstall": "cd client && npm install && cd ../server && npm install && cd ..",
"test": "sh ./scripts/e2e.sh"
},
"devDependencies": {
"@types/mocha": "^9.1.0",
"@types/node": "^16.11.7",
"@typescript-eslint/eslint-plugin": "^5.54.0",
"@typescript-eslint/parser": "^5.54.0",
"eslint": "^8.35.0",
"mocha": "^9.2.1",
"typescript": "^5.0.2"
}
}
4 changes: 2 additions & 2 deletions server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
"publicodes": "^1.2.0",
"tree-sitter": "^0.21.1",
"tree-sitter-publicodes": "file:../../tree-sitter-publicodes",
"vscode-languageserver": "^8.1.0",
"vscode-languageserver-textdocument": "^1.0.8",
"vscode-languageserver": "^9.0.1",
"vscode-languageserver-textdocument": "^1.0.11",
"yaml": "^2.2.1"
},
"scripts": {},
Expand Down
3 changes: 0 additions & 3 deletions server/src/initialized.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,6 @@ export default function intializedHandler(ctx: LSContext) {
folders.forEach((folder) => {
parseDir(ctx, folder.uri);
});
ctx.connection.console.log(
`Validating ${Object.keys(ctx.rawPublicodesRules).length} rules`,
);
validate(ctx);
}
});
Expand Down
46 changes: 25 additions & 21 deletions server/src/publicodesRules.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
import { readFileSync, readdirSync, statSync } from "fs";
import { join } from "path";
import { FilePath, LSContext, RawPublicodes, RuleDef } from "./context";
import parseYAML from "./parseYAML";
import { fileURLToPath, pathToFileURL } from "node:url";

import { resolveImports } from "./resolveImports";
import { TextDocument } from "vscode-languageserver-textdocument";

import * as TSParser from "tree-sitter";
import * as Publicodes from "tree-sitter-publicodes";
import { readFile } from "fs/promises";
import { Diagnostic } from "vscode-languageserver/node";
import { Diagnostic, DiagnosticSeverity } from "vscode-languageserver/node";
import { getModelFromSource } from "@publicodes/tools/compilation";

import { FilePath, LSContext, RawPublicodes, RuleDef } from "./context";

const PUBLICODES_FILE_EXTENSION = ".publicodes";

Expand Down Expand Up @@ -59,7 +56,11 @@ export function parseDocument(
const currentFileInfos = ctx.fileInfos.get(filePath);
const tsTree = parser.parse(fileContent, currentFileInfos?.tsTree);

const { rawRules, error } = parseRawRules(ctx, filePath, document);
const { rawRules, error } = parseRawRules(filePath, document);

ctx.connection.console.log(
"[parseDocument] parsed " + JSON.stringify(rawRules, null, 2),
);

ctx.fileInfos.set(filePath, {
ruleDefs: collectRuleDefs(tsTree),
Expand All @@ -76,23 +77,26 @@ export function parseDocument(
* Parse and resolve imports of a publicodes file
*/
function parseRawRules(
ctx: LSContext,
filePath: FilePath,
document?: TextDocument,
): { rawRules: RawPublicodes; error?: Diagnostic | undefined } {
const { rules, error } = parseYAML(
ctx,
document,
readFileSync(filePath).toString(),
);

if (error) {
return { rawRules: {}, error: error };
try {
const resolvedRules = getModelFromSource(filePath);
return { rawRules: resolvedRules };
} catch (e: any) {
return {
rawRules: {},
error: {
severity: DiagnosticSeverity.Error,
range: {
start: { line: 0, character: 0 },
end: { line: 0, character: "importer!".length },
},
message: e.message,
source: "publicodes",
},
};
}

const resolvedRules = resolveImports(rules, { verbose: true, ctx });

return { rawRules: resolvedRules };
}

/**
Expand Down
15 changes: 8 additions & 7 deletions server/src/validate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@ export default async function validate(
// if not already opened in the editor
documentURI?: string,
): Promise<void> {
let diagnostics: Diagnostic[] = [];
let errorURI: string | undefined;

ctx.diagnostics = [];

if (document == undefined && ctx.lastOpenedFile != undefined) {
if (documentURI !== undefined) {
document = TextDocument.create(
Expand All @@ -44,12 +45,12 @@ export default async function validate(

try {
ctx.connection.console.log(
`Parsing ${Object.keys(ctx.rawPublicodesRules).length} rules`,
`[validate] Parsing ${Object.keys(ctx.rawPublicodesRules).length} rules`,
);
const engine = new Engine(ctx.rawPublicodesRules);
ctx.parsedRules = engine.getParsedRules();
ctx.connection.console.log(
`Validate Parsed ${Object.keys(ctx.parsedRules).length} rules`,
`[validate] Parsed ${Object.keys(ctx.parsedRules).length} rules`,
);
// Remove previous diagnostics
ctx.URIToRevalidate.delete(document.uri);
Expand All @@ -66,7 +67,7 @@ export default async function validate(
? pathToFileURL(ctx.ruleToFileNameMap.get(wrongRule) ?? document.uri)
.href
: document.uri;
diagnostics.push({
ctx.diagnostics.push({
severity: DiagnosticSeverity.Error,
range: {
start: document.positionAt(0),
Expand All @@ -77,15 +78,15 @@ export default async function validate(
}

errorURI = errorURI ?? document.uri;
if (diagnostics.length > 0) {
if (ctx.diagnostics.length > 0) {
ctx.URIToRevalidate.add(errorURI);
}
console.log(
`[validate] Sending ${diagnostics.length} diagnostics to:`,
`[validate] Sending ${ctx.diagnostics.length} diagnostics to:`,
errorURI,
);
ctx.connection.sendDiagnostics({
uri: errorURI,
diagnostics,
diagnostics: ctx.diagnostics,
});
}
13 changes: 10 additions & 3 deletions server/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
{
"compilerOptions": {
"target": "es2020",
"lib": ["es2020"],
"lib": [
"es2020"
],
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"strict": true,
"outDir": "out",
"rootDir": "src"
},
"include": ["src"],
"exclude": ["node_modules", ".vscode-test"]
"include": [
"src"
],
"exclude": [
"node_modules",
".vscode-test"
]
}
Loading

0 comments on commit e97672a

Please sign in to comment.