diff --git a/web/src/lib/server/repos.ts b/web/src/lib/server/repos.ts index 7378a4f..d869319 100644 --- a/web/src/lib/server/repos.ts +++ b/web/src/lib/server/repos.ts @@ -10,6 +10,8 @@ import { templateCppCMakeLists, templateCppGitIgnore, templateCppProblem, + templateCppVscodeLaunch, + templateCppVscodeTasks, templateJavaProblem } from './templates'; @@ -52,6 +54,10 @@ async function addProblemsCPP(opts: OptsAddProblems) { }); opts.fs.writeFileSync(join(opts.dir, 'CMakeLists.txt'), cmakeLists); + opts.fs.mkdirSync(join(opts.dir, '.vscode')); + opts.fs.writeFileSync(join(opts.dir, '.vscode', 'launch.json'), templateCppVscodeLaunch); + opts.fs.writeFileSync(join(opts.dir, '.vscode', 'tasks.json'), templateCppVscodeTasks); + opts.contest.problems.forEach((problem) => { opts.fs.mkdirSync(join(opts.dir, problem.pascalName)); const filledTemplate = templateCppProblem.replaceAll('%%pascalName%%', problem.pascalName); diff --git a/web/src/lib/server/templates.ts b/web/src/lib/server/templates.ts index 4eca960..5b946b1 100644 --- a/web/src/lib/server/templates.ts +++ b/web/src/lib/server/templates.ts @@ -41,5 +41,67 @@ int main() return 0; }`; -export const templateCppGitIgnore = `/build +export const templateCppGitIgnore = `/**/build +`; + +export const templateCppVscodeLaunch = `{ + "configurations": [ + { + "name": "C/C++: g++ build and debug active file", + "type": "cppdbg", + "request": "launch", + "program": "\${fileDirname}/build/\${fileBasenameNoExtension}.out", + "args": [], + "stopAtEntry": false, + "cwd": "\${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ], + "preLaunchTask": "C/C++: g++ build active file", + "miDebuggerPath": "/usr/bin/gdb" + } + ], + "version": "2.0.0" +} +`; +export const templateCppVscodeTasks = `{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: g++ build active file", + "command": "/usr/bin/g++", + "args": [ + "-fdiagnostics-color=always", + "-g", + "\${file}", + "-o", + "\${fileDirname}/build/\${fileBasenameNoExtension}.out" + ], + "options": { + "cwd": "\${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} `;