-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathextension.js
148 lines (138 loc) · 5.88 KB
/
extension.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
const vscode = require('vscode');
const { privateEncrypt } = require('crypto');
const {extractCodeBlockContent}=require('./gencode/extractcode')
const path = require('path');
const fs = require('fs');
const {api}=require('./gencode/apigpt')
//api chatgpt configuratonio
/**
* @param {vscode.ExtensionContext} context
*/
function activate(context) {
//1er commande generer un code
let disposable = vscode.commands.registerCommand('code-gen.gencode', function () {
const editor = vscode.window.activeTextEditor;
if (editor) { const document = editor.document;
const position = editor.selection.active;
console.log(`Cursor position: Line ${position.line + 1}, Column ${position.character + 1}`);
// la position de curseur
const endPosition = new vscode.Position(position.line + 2, 1);
//extraire extension de fichier
const filePath = document.fileName;//extraire le nom de fechier compléte
const extension = path.extname(filePath).slice(1);//extraire extansion
try { const commentRegex = /\/\/(.*)|\/\*([\s\S]*?)\*\/|#(.*)/g;// regex pour extraire les commantaire dans les language javascript, python and java ...
const comments = [];
//en charge dans la liste comments touts les commentaire existant
for (let i = 0; i < document.lineCount; i++) {
const line = document.lineAt(i).text;
let match;
while ((match = commentRegex.exec(line))) {
// Nous avons trois groupes de capture, nous devons donc vérifier lequel est défini et non vide
const comment = match[1] || match[2] || match[3];
comments.push(comment.trim());}}
if (comments.length > 0) {
console.log(comments[comments.length-1]);
// prend la dirniere commentaire
let comentaire= comments[comments.length-1]+` :donné directement le code et avec ${extension}`
api(comentaire).then(rep=>{
let answer=extractCodeBlockContent(rep)
editor.edit((editBuilder) => {
editBuilder.insert(endPosition, answer);
}).then(() => {
vscode.window.showInformationMessage('Texte genérer avec succès !');
});
}).catch(e=>{vscode.window.showInformationMessage(`il y a une erreur avec gpt :`);})
} else {vscode.window.showInformationMessage('Aucun commentaire trouvé dans le fichier.');}
} catch (err) {
vscode.window.showErrorMessage(`Erreur lors de la lecture du fichier : ${err.message}`);}}});
context.subscriptions.push(disposable);
//2eme command commenter un code
let disposable1 = vscode.commands.registerCommand('code-gen.comment', () => {
let editor = vscode.window.activeTextEditor;
// Vérifiez s'il y a un éditeur de texte actif
if (!editor) {
return;
}
//extraire le code selectioner
const document = editor.document;
const selection = editor.selection;
const selectedCode = document.getText(selection);
api(`write this ${selectedCode} code with comments`).then(rep=>{
let answer=extractCodeBlockContent(rep)
editor.edit((editBuilder) => {
//remplacer le code selctionner par le nouveau code commenter
editBuilder.replace(selection, answer);
}).then(() => {
vscode.window.showInformationMessage('Texte genérer avec succès !');
});
}).catch(e=>{
vscode.window.showInformationMessage(`il y a une erreur avec gpt :`);
})
});
context.subscriptions.push(disposable1);
//3eme command ecrire des test unitaire
let disposable2 = vscode.commands.registerCommand('code-gen.unitTest', () => {
const editor = vscode.window.activeTextEditor;
if (!editor) {
vscode.window.showInformationMessage('Aucun fichier ouvert.');
return;
}
//extraire le nom de fichier
const pathe = editor.document.fileName;
const activeFileName = path.basename(pathe);
//le texte selectionner
const selection = editor.selection;
if (selection.isEmpty) {
vscode.window.showInformationMessage('Sélectionnez du code à transférer.');
return;
}
const selectedCode = editor.document.getText(selection);
//nom de fichier de test est de la forme suivant (test-*)
const newFilePath = path.join(path.dirname(pathe), `Test-${activeFileName}`);
const newFileUri = vscode.Uri.file(newFilePath);
api("write a unit test for this code:\n" +selectedCode+" ,and import the necessary modules").then(rep=>{
let answer=extractCodeBlockContent(rep)
fs.appendFile(newFileUri.fsPath,answer, (err) => {//inserer dans le fichier et crée le fichier s'il n'existe pas
if (err) {
vscode.window.showErrorMessage('Une erreur sur la generation des test unitaire');
console.error(err);
return;
}
vscode.window.showInformationMessage(`les test sont inséré dans ${newFileName}`);
});
}).catch(e=>{
vscode.window.showInformationMessage(`il y a une erreur avec gpt :`);
})
});
context.subscriptions.push(disposable2);
//4eme refactorer un code existant pour améliorer sa qualité
let disposable3 = vscode.commands.registerCommand('code-gen.refactorer', () => {
let editor = vscode.window.activeTextEditor;
// Vérifiez s'il y a un éditeur de texte actif
if (!editor) {
return;
}
//extraire le code selectioner
const document = editor.document;
const selection = editor.selection;
const selectedCode = document.getText(selection);
api(`refactor and fix this ${selectedCode} to improve its quality, just give the code`).then(rep=>{
let answer=extractCodeBlockContent(rep)
editor.edit((editBuilder) => {
//remplacer le code selctionner par le nouveau code commenter
editBuilder.replace(selection, answer);
}).then(() => {
vscode.window.showInformationMessage('Texte genérer avec succès !');
});
}).catch(e=>{
vscode.window.showInformationMessage(`il y a une erreur avec gpt :`);
})
});
context.subscriptions.push(disposable3);
}
// This method is called when your extension is deactivated
function deactivate() {}
module.exports = {
activate,
deactivate
}