extension.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import * as vscode from 'vscode';
  2. import * as fs from 'fs';
  3. export function activate(context: vscode.ExtensionContext) {
  4. let disposable = vscode.commands.registerCommand('canonicalclass.makeclass', async function (){
  5. let name = await vscode.window.showInputBox({
  6. prompt: "Enter your Class Name",
  7. validateInput: (text: string): string | undefined => {
  8. if (!text){
  9. return 'You must enter a name';
  10. } else {
  11. return undefined;
  12. }
  13. }
  14. })
  15. if (name !== undefined){
  16. name = name.charAt(0).toUpperCase() + name.slice(1)
  17. const wsedit = new vscode.WorkspaceEdit();
  18. const wsPath = vscode.workspace.workspaceFolders![0].uri.fsPath;
  19. const filePathCpp = vscode.Uri.file(wsPath + '/' + name + '.Class' + '.cpp');
  20. const filePathHpp = vscode.Uri.file(wsPath + '/' + name + '.Class' + '.hpp');
  21. wsedit.createFile(filePathCpp, { ignoreIfExists: true });
  22. wsedit.createFile(filePathHpp, { ignoreIfExists: true });
  23. vscode.workspace.applyEdit(wsedit);
  24. let len = name.length;
  25. len += 23;
  26. len = 80 - len - 1
  27. let star = "*"
  28. for (; len > 0; len--)
  29. {
  30. star += "*"
  31. }
  32. let classcpp = "#include \"" + name + ".Class" + ".hpp\"\n\n" +
  33. name + "::" + name + "() {}\n\n" +
  34. name + "::" + name + "( const " + name + " & object ) {}\n\n" +
  35. name + "::~" + name + "()\n{\n std::cout << \"Destructor called\" << std::endl;\n}\n\n" +
  36. name + " & " + name + "::operator=( " + name + " const & rhs )\n{\n return *this;\n}\n\n" +
  37. "std::ostream & operator<<( std::ostream & o, " + name + " const & i )\n" +
  38. "{\n o << \"Value\" << i.get();\n return o;\n}\n\n" +
  39. "\n/* ************************************************************************** */";
  40. let classhpp = "#ifndef " + name.toUpperCase() + "_CLASS" + "_HPP\n" +
  41. "# define " + name.toUpperCase() + "_CLASS" + "_HPP\n\n" +
  42. "# include <iostream>\n\n" +
  43. "class " + name + "\n{\n" +
  44. "\n" +
  45. " public:\n" +
  46. "\n" +
  47. " " + name + "();\n" +
  48. " " + name + "( " + name + " const & src );\n" +
  49. " ~" + name + "();\n" +
  50. "\n" +
  51. " " + name + " & operator=( " + name + " const & rhs );"+
  52. "\n\n" +
  53. " private:\n" +
  54. "\n" +
  55. "};\n\n" +
  56. "\n" +
  57. "std::ostream & operator<<( std::ostream & o, " + name + " const & i );"+
  58. "\n\n" +
  59. "#endif /* *" + star + " " + name.toUpperCase() + "_CLASS_H */";
  60. fs.writeFile(filePathCpp.fsPath, classcpp, function (err: any) { if (err) return console.log(err); });
  61. fs.writeFile(filePathHpp.fsPath, classhpp, function (err: any) { if (err) return console.log(err); });
  62. vscode.window.showInformationMessage("Files : " + name + ".class.cpp, " + name + ".class.hpp created !");
  63. }
  64. });
  65. context.subscriptions.push(disposable);
  66. }
  67. // this method is called when your extension is deactivated
  68. export function deactivate() {}