From a7a104a78da756d5f3b01c68447448e86e422260 Mon Sep 17 00:00:00 2001 From: MartinFillon Date: Fri, 31 May 2024 21:23:17 +0200 Subject: [PATCH 1/2] feat(haskell): add module auto generation As its done with classes for c++ i thought that adding auto module generation for haskell is a good idea --- README.md | 1 + package-lock.json | 79 ++++++++++++++++++++++++++++++-------- src/commands/add_header.ts | 5 ++- src/config.ts | 13 +++++++ src/generators.ts | 7 ++++ src/types.ts | 1 + 6 files changed, 88 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 3a5b4f9..d2c6871 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ This extension uses the following configuration entries: - `epitech-c-cpp-headers.prompt`: Specify if the extension should prompt for unknown configuration fields (default: true) - `epitech-c-cpp-headers.usePragmaOnce`: Specifies if '#pragma once' should be used as header guard instead of '#ifndef ...' (default: false) - `epitech-c-cpp-headers.autoGenerateClasses`: Specifies if automatic C++ class generation is enabled (default: true) +- `epitech-c-cpp-headers.autoGenerateModules`: Specifies if automatic Haskell module generation is enabled (default: true) Known Issues ------------ diff --git a/package-lock.json b/package-lock.json index c165bcf..461df15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,21 @@ { "name": "epitech-c-cpp-headers", - "version": "1.14.0", + "version": "1.16.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "epitech-c-cpp-headers", - "version": "1.14.0", + "version": "1.16.0", "hasInstallScript": true, "dependencies": { "escape-string-regexp": "^2.0.0", - "vscode": "^1.1.37", "zod": "^3.23.8" }, "devDependencies": { "@types/node": "^20.12.11", - "typescript": "^5.4.5" + "typescript": "^5.4.5", + "vscode": "^1.1.37" }, "engines": { "vscode": "^1.18.1" @@ -25,6 +25,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, "engines": { "node": ">= 6" } @@ -42,6 +43,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz", "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==", + "dev": true, "dependencies": { "debug": "4" }, @@ -52,12 +54,14 @@ "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -66,27 +70,32 @@ "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, "node_modules/commander": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -103,6 +112,7 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, "engines": { "node": ">=0.3.1" } @@ -110,12 +120,14 @@ "node_modules/es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true }, "node_modules/es6-promisify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, "dependencies": { "es6-promise": "^4.0.3" } @@ -131,12 +143,14 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -156,6 +170,7 @@ "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, "engines": { "node": ">=4.x" } @@ -164,6 +179,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, "engines": { "node": ">=4" } @@ -172,6 +188,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true, "bin": { "he": "bin/he" } @@ -180,6 +197,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -193,6 +211,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -205,6 +224,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -213,12 +233,14 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -229,13 +251,15 @@ "node_modules/minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==" + "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", + "dev": true }, "node_modules/mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, "dependencies": { "minimist": "0.0.8" }, @@ -247,6 +271,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, "dependencies": { "browser-stdout": "1.3.1", "commander": "2.15.1", @@ -272,6 +297,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, "dependencies": { "ms": "2.0.0" } @@ -280,6 +306,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -288,6 +315,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -304,6 +332,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -314,17 +343,20 @@ "node_modules/mocha/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -333,6 +365,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -341,6 +374,7 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -349,6 +383,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -357,6 +392,7 @@ "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -366,6 +402,7 @@ "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -397,6 +434,7 @@ "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.37.tgz", "integrity": "sha512-vJNj6IlN7IJPdMavlQa1KoFB3Ihn06q1AiN3ZFI/HfzPNzbKZWPPuiU+XkpNOfGU5k15m4r80nxNPlM7wcc0wg==", "deprecated": "This package is deprecated in favor of @types/vscode and vscode-test. For more information please read: https://code.visualstudio.com/updates/v1_36#_splitting-vscode-package-into-typesvscode-and-vscodetest", + "dev": true, "dependencies": { "glob": "^7.1.2", "http-proxy-agent": "^4.0.1", @@ -418,6 +456,7 @@ "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==", "deprecated": "This package has been renamed to @vscode/test-electron, please update to the new name", + "dev": true, "dependencies": { "http-proxy-agent": "^2.1.0", "https-proxy-agent": "^2.2.1" @@ -430,6 +469,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, "dependencies": { "es6-promisify": "^5.0.0" }, @@ -441,6 +481,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, "dependencies": { "ms": "2.0.0" } @@ -449,6 +490,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, "dependencies": { "agent-base": "4", "debug": "3.1.0" @@ -461,6 +503,7 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -472,12 +515,14 @@ "node_modules/vscode-test/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "node_modules/zod": { "version": "3.23.8", diff --git a/src/commands/add_header.ts b/src/commands/add_header.ts index 080d0df..15960b7 100644 --- a/src/commands/add_header.ts +++ b/src/commands/add_header.ts @@ -4,7 +4,7 @@ import * as vscode from "vscode"; import { FileInfo, isSupportedExtension } from "../types"; import { EXTENSION_TO_LANGUAGE, LINE_TERMINATORS, SYNTAX } from "../constants"; import { loadConfig } from "../config"; -import { GENERATORS, appendClass, appendConstructorDestructor, appendIfndef } from "../generators"; +import { GENERATORS, appendClass, appendConstructorDestructor, appendHaskellModule, appendIfndef } from "../generators"; import { isUpper } from "../utils"; // Asks the user about the project name to use, or defaults to using the current workspace's name. @@ -159,6 +159,9 @@ export async function runAddHeader() { if (config.autoGenerateClasses && fileInfo.langId == "C++" && isUpper(className[0])) { editContent = appendConstructorDestructor(editContent, className, fileInfo); } + if (config.autoGenerateModules && fileInfo.langId == "Haskell") { + editContent = appendHaskellModule(editContent,fileInfo); + } } const edit = new vscode.WorkspaceEdit(); diff --git a/src/config.ts b/src/config.ts index 8276c4c..ddf38e7 100644 --- a/src/config.ts +++ b/src/config.ts @@ -64,12 +64,24 @@ async function configureClassGeneration(config: vscode.WorkspaceConfiguration) { } } +async function configureModulesGeneration(config: vscode.WorkspaceConfiguration) { + const resp = await vscode.window.showInformationMessage( + "Do you want automatic Haskell module generation ?", + "Yes", + "No", + ); + if (resp !== undefined) { + config.update("autoGenerateModules", resp == "Yes", true); + } +} + export async function configureSettings(config: vscode.WorkspaceConfiguration, force = false) { await configureUsername(config, force); await configureLogin(config, force); await configureHeaderFormat(config); await configureHeaderGuardKind(config); await configureClassGeneration(config); + await configureModulesGeneration(config); vscode.window.showInformationMessage("EPITECH headers have been successfully configured !"); } @@ -83,6 +95,7 @@ export function loadConfig(): Config { usePragmaOnce: z.boolean().default(false), autoGenerateClasses: z.boolean().default(true), indentAccessSpecifiers: z.boolean().default(true), + autoGenerateModules: z.boolean().default(true), }).parse(handle); return { ...config, handle }; diff --git a/src/generators.ts b/src/generators.ts index 1afa63f..72053c4 100644 --- a/src/generators.ts +++ b/src/generators.ts @@ -98,3 +98,10 @@ export function appendConstructorDestructor(editContent: string, className: stri ); return editContent; } + +export function appendHaskellModule(editContent: string, fileInfo: FileInfo): string { + return editContent.concat( + `module ${fileInfo.fileName} () where`, fileInfo.eol, + fileInfo.eol, + ); +} diff --git a/src/types.ts b/src/types.ts index a8afde5..80d08bc 100644 --- a/src/types.ts +++ b/src/types.ts @@ -26,6 +26,7 @@ export type Config = { usePragmaOnce: boolean; autoGenerateClasses: boolean; indentAccessSpecifiers: boolean; + autoGenerateModules: boolean; }; export type HeaderGenerator = { From 2b7a8bfbaf6e419a41e46ec002743d708fdea40c Mon Sep 17 00:00:00 2001 From: MartinFillon Date: Fri, 31 May 2024 21:32:48 +0200 Subject: [PATCH 2/2] fix: module name was not right --- src/commands/add_header.ts | 4 +++- src/generators.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/commands/add_header.ts b/src/commands/add_header.ts index 15960b7..16f0df8 100644 --- a/src/commands/add_header.ts +++ b/src/commands/add_header.ts @@ -120,6 +120,7 @@ export async function runAddHeader() { const config = loadConfig(); + console.log(config); if (config.headerType == "post2017") { const description = await promptFileDescription(fileInfo); if (description === undefined) return; @@ -131,7 +132,7 @@ export async function runAddHeader() { let offsetX = 0; const isEmptyHeaderFile = (fileInfo.document.getText() == '' && fileInfo.ext.match(/^(?:h|hpp|H|hh|hxx)$/)); - const isEmptySourceFile = (fileInfo.document.getText() == '' && fileInfo.ext.match(/^(?:c|cpp|C|cc|cxx)$/)); + const isEmptySourceFile = (fileInfo.document.getText() == '' && fileInfo.ext.match(/^(?:c|cpp|C|cc|cxx|hs|lhs)$/)); if (isEmptyHeaderFile) { const baseName = path.basename(fileInfo.fileName); @@ -154,6 +155,7 @@ export async function runAddHeader() { } } + if (isEmptySourceFile) { const className = path.basename(fileInfo.fileName).slice(0, -(fileInfo.ext.length + 1)); if (config.autoGenerateClasses && fileInfo.langId == "C++" && isUpper(className[0])) { diff --git a/src/generators.ts b/src/generators.ts index 72053c4..13b0168 100644 --- a/src/generators.ts +++ b/src/generators.ts @@ -101,7 +101,7 @@ export function appendConstructorDestructor(editContent: string, className: stri export function appendHaskellModule(editContent: string, fileInfo: FileInfo): string { return editContent.concat( - `module ${fileInfo.fileName} () where`, fileInfo.eol, + `module ${path.basename(fileInfo.fileName).slice(0, -(fileInfo.ext.length + 1))} () where`, fileInfo.eol, fileInfo.eol, ); }