tasks.json (4788B)
1 { 2 "version": "2.0.0", 3 "tasks": [ 4 { 5 "label": "Silent Auto-Pull", 6 "type": "shell", 7 "command": "git pull", 8 "runOptions": { 9 "runOn": "folderOpen" 10 }, 11 "presentation": { 12 "reveal": "never", 13 "panel": "shared", 14 "showReuseMessage": false, 15 "clear": true 16 } 17 }, 18 { 19 "label": "C/C++: build active file", 20 "type": "shell", 21 "command": "if [ \"${fileExtname}\" = \".cpp\" ]; then c=\"g++\"; else c=\"gcc\"; fi; exe=\"${fileDirname}/${fileBasenameNoExtension}\"; fnT() { if [ $1 -ge 1000 ]; then echo \"$(($1/1000)).$(( ($1%1000)/100 ))s\"; else echo \"${1}ms\"; fi; }; echo -e \"\\e[36m▶\\e[0m Building \\e[1m${fileBasename}\\e[0m \\e[90m($c)\\e[0m\"; start_t=$(date +%s%3N); out=$($c -fdiagnostics-color=always -g \"${file}\" -o \"$exe\" 2>&1); bexit=$?; end_t=$(date +%s%3N); bms=$((end_t - start_t)); if [ -n \"$out\" ]; then echo \"$out\"; fi; w=$(echo \"$out\" | grep -ic \"warning:\"); e=$(echo \"$out\" | grep -ic \"error:\"); if [ $bexit -eq 0 ]; then sz=$(du -h \"$exe\" 2>/dev/null | cut -f1); echo -e \"\\e[32m✓ build ok\\e[0m \\e[90min $(fnT $bms) · $w warn · $sz\\e[0m\"; else echo -e \"\\e[31m✗ build failed\\e[0m \\e[90min $(fnT $bms) · $e error(s) · $w warn\\e[0m\"; fi; exit $bexit", 22 "args": [], 23 "options": { 24 "cwd": "${fileDirname}", 25 "shell": { 26 "executable": "/bin/bash", 27 "args": ["-c"] 28 } 29 }, 30 "problemMatcher": ["$gcc"], 31 "group": "build", 32 "detail": "Auto-selects gcc for .c and g++ for .cpp" 33 }, 34 { 35 "label": "C/C++: build and run active file", 36 "type": "shell", 37 "command": "if [ \"${fileExtname}\" = \".cpp\" ]; then c=\"g++\"; else c=\"gcc\"; fi; exe=\"${fileDirname}/${fileBasenameNoExtension}\"; logDir=\"/home/notamitgamer/Documents/bsc/buildLog\"; mkdir -p \"$logDir\"; ts=$(date +\"%Y-%m-%d_%H-%m-%M_%S\"); logFile=\"$logDir/buildLog_$ts.txt\"; strip() { sed -r 's/\\x1B\\[([0-9]{1,3}(;[0-9]{1,3})*)?[mGK]//g'; }; log() { echo -e \"$1\"; echo -e \"$1\" | strip >> \"$logFile\"; }; fnT() { if [ $1 -ge 1000 ]; then echo \"$(($1/1000)).$(( ($1%1000)/100 ))s\"; else echo \"${1}ms\"; fi; }; ver=$($c --version | head -n 1); loc=$(wc -l < \"${file}\"); log \"\\e[90m$(date +'%Y-%m-%d %H:%M:%S') · ${loc} lines · $ver\\e[0m\"; log \"\\e[36m▶\\e[0m Building \\e[1m${fileBasename}\\e[0m \\e[90m($c)\\e[0m\"; start_t=$(date +%s%3N); out=$($c -fdiagnostics-color=always -g \"${file}\" -o \"$exe\" 2>&1); bexit=$?; end_t=$(date +%s%3N); bms=$((end_t - start_t)); if [ -n \"$out\" ]; then log \"$out\"; fi; w=$(echo \"$out\" | grep -ic \"warning:\"); e=$(echo \"$out\" | grep -ic \"error:\"); if [ $bexit -eq 0 ]; then sz=$(du -h \"$exe\" 2>/dev/null | cut -f1); log \"\\e[32m✓ build ok\\e[0m \\e[90min $(fnT $bms) · $w warn · $sz\\e[0m\"; else log \"\\e[31m✗ build failed\\e[0m \\e[90min $(fnT $bms) · $e error(s) · $w warn\\e[0m\"; log \"\\e[90mlog: $logFile\\e[0m\"; exit 1; fi; log \"\"; log \"\\e[36m▶\\e[0m Running \\e[1m${fileBasenameNoExtension}\\e[0m\"; log \"\\e[90m──────────────────────────────────────────\\e[0m\"; rstart_t=$(date +%s%3N); \"$exe\" 2>&1 | tee >(strip >> \"$logFile\"); rexit=${PIPESTATUS[0]}; rend_t=$(date +%s%3N); rms=$((rend_t - rstart_t)); log \"\\e[90m──────────────────────────────────────────\\e[0m\"; rm -f \"$exe\"; if [ $rexit -eq 0 ]; then rc=\"32\"; else rc=\"31\"; fi; log \"\\e[${rc}m■ exit $rexit\\e[0m \\e[90min $(fnT $rms)\\e[0m\"; log \"\\e[90mlog: $logFile\\e[0m\"; { echo \"\"; echo \"────── SOURCE ──────\"; cat \"${file}\"; } >> \"$logFile\"; exit 0", 38 "args": [], 39 "options": { 40 "cwd": "${fileDirname}", 41 "shell": { 42 "executable": "/bin/bash", 43 "args": ["-c"] 44 } 45 }, 46 "problemMatcher": ["$gcc"], 47 "group": { 48 "kind": "build", 49 "isDefault": true 50 }, 51 "presentation": { 52 "echo": false, 53 "reveal": "always", 54 "focus": true, 55 "panel": "shared", 56 "showReuseMessage": true, 57 "clear": true 58 }, 59 "detail": "Builds, runs, compact status lines, full logging preserved" 60 } 61 ] 62 }