getreadystack/gnu-global-cpp-vscode-config-pack
0
1<!doctype html><html lang="en"><meta charset="utf-8">2<meta name="viewport" content="width=device-width,initial-scale=1">3<title>GNU Global C/C++ .vscode Config Pack</title>4<meta name="description" content="Paste a .vscode file. The 21 rules name the line and the fix. Left is the line that loads silently, right is the line that works.">5<style>6:root{color-scheme:light dark}7body{margin:0;font:16px/1.6 system-ui,-apple-system,"Segoe UI",sans-serif;8 background:#fbfbfa;color:#16161d}9@media(prefers-color-scheme:dark){body{background:#14141a;color:#e8e8ea}}10.wrap{max-width:880px;margin:0 auto;padding:28px 20px 64px}11h1{font-size:1.7rem;line-height:1.25;margin:.2em 0 .3em}12p.sub{margin:0 0 1.4em;opacity:.8}13textarea{width:100%;min-height:230px;font:13px/1.5 ui-monospace,Menlo,Consolas,monospace;14 padding:12px;border:1px solid #c9c9d1;border-radius:10px;background:transparent;color:inherit;15 box-sizing:border-box}16button{font:600 15px/1 inherit;padding:12px 22px;border:0;border-radius:10px;17 background:#1d4ed8;color:#fff;cursor:pointer;margin:12px 0}18button:hover{background:#1a43bd}19table{border-collapse:collapse;width:100%;margin-top:14px;font-size:14px}20th,td{border-bottom:1px solid #d8d8e0;padding:8px 6px;text-align:left;vertical-align:top}21th{font-weight:600;opacity:.75}22td.n{width:64px;font:13px ui-monospace,monospace;opacity:.7}23.ok{padding:14px;border-radius:10px;background:#e8f5ec;color:#14532d;margin-top:14px}24@media(prefers-color-scheme:dark){.ok{background:#15321f;color:#bbf7d0}}25.next{margin-top:30px;padding:18px;border:1px solid #d8d8e0;border-radius:12px}26.next h2{font-size:1.05rem;margin:0 0 .5em}27.next ul{margin:.3em 0 1em 1.1em;padding:0}28a.buy{display:inline-block;margin:14px 0 2px;padding:12px 20px;border-radius:10px;background:#1d4ed8;color:#fff;text-decoration:none;font-weight:600}29a.buy:hover{background:#1a43bd}30.rest{margin-top:10px;font-size:14px;opacity:.85}31</style>32<div class="wrap">33<h1>GNU Global C/C++ .vscode Config Pack</h1>34<p class="sub">Paste a .vscode file. The 21 rules name the line and the fix. Left is the line that loads silently, right is the line that works.</p>35<textarea id="src" placeholder="Paste settings.json, tasks.json, launch.json or c_cpp_properties.json here"></textarea>36<button id="go">Check this file</button>37<div id="out"></div>38<div class="next"><h2>The next file, and the 40 after it</h2><ul><li>Audit every config file in the repository at once</li><li>Write the findings to CSV, JSON or HTML</li><li>Add your team's own rules alongside the 21</li></ul><a class="buy" href="https://getreadystack.com/api/buy/cl/polar_cl_Ge5u327gSZxIxtXPvdIVqBgdNtoieIuKZKWfV1LjjLp">Audit the whole repository — $29 one-off</a><div class="rest">Everything on this page stays free and unlimited: all 21 rules, on any file you paste, with no key.</div></div>39<script>40var RULES=[{"pattern": "\\$\\{workspaceRoot\\}", "flags": "i", "message": "${workspaceRoot} is the deprecated name. Newer VS Code releases resolve it inconsistently across tasks and launch configs, so the path can come out empty and the task runs in the wrong folder. Use ${workspaceFolder}.", "fix": "${workspaceFolder}"}, {"pattern": "\"/(home|Users)/[^\"]+\"", "flags": "", "message": "An absolute path from your own machine. Every teammate who clones this repository gets a path that does not exist, and the setting is ignored without an error. Use ${workspaceFolder} for repo paths or ${userHome} for personal ones."}, {"pattern": "[A-Za-z]:\\\\[^\\\\\"]", "flags": "", "message": "A single backslash in a Windows path is an invalid JSON escape. This file will not parse and every setting in it is dropped. Double the backslashes or use forward slashes, which VS Code accepts on Windows."}, {"pattern": ",\\s*[}\\]]", "flags": "", "message": "Trailing comma. tasks.json and settings.json tolerate it, but package.json, .eslintrc.json and any tool reading this with a strict JSON parser will fail on this line."}, {"pattern": "\"[^\"]*[Tt]oken\"\\s*:\\s*\"gh[pousr]_", "flags": "", "message": "A GitHub token is written into a file that lives in the repository. The moment this is pushed the token is public; GitHub revokes leaked tokens automatically and your gist and repo access stops. Move it to the VS Code secret storage or an environment variable."}, {"pattern": "\"[^\"]*([Ss]ecret|[Pp]assword|apiKey|api_key)\"\\s*:\\s*\"[^\"$][^\"]{7,}\"", "flags": "", "message": "A literal credential in a committed workspace file. Reference an environment variable such as ${env:MY_SECRET} instead of the value itself."}, {"pattern": "\"version\"\\s*:\\s*\"0\\.1\\.0\"", "flags": "", "message": "This is the legacy tasks.json schema. Task groups, presentation options and background matchers are all ignored under 0.1.0. The current schema is 2.0.0.", "fix": "\"version\": \"2.0.0\""}, {"pattern": "\"[A-Za-z_.]*[Pp]ath\"\\s*:\\s*\"~/", "flags": "", "message": "VS Code does not expand a leading tilde in JSON configuration. The path resolves literally to a folder named ~ , so the setting silently does nothing. Use ${userHome}/ instead."}, {"pattern": "\"console\"\\s*:\\s*\"internalConsole\"", "flags": "", "message": "The internal debug console cannot take keyboard input. Your program blocks forever on the first read from stdin and looks hung. Use integratedTerminal for anything that reads input.", "fix": "\"console\": \"integratedTerminal\""}, {"pattern": "\"intelliSenseMode\"\\s*:\\s*\"(msvc|gcc|clang)-(x64|x86|arm64|arm)\"", "flags": "", "message": "This is the pre-platform form of intelliSenseMode. The current values carry the platform first: windows-msvc-x64, linux-gcc-x64, macos-clang-arm64. The old value falls back to a guess and your defines and include search can differ from the real compiler."}, {"pattern": "\"cStandard\"\\s*:\\s*\"(c\\+\\+|gnu\\+\\+)", "flags": "", "message": "A C++ standard has been put in cStandard. C and C++ standards are separate keys: cStandard takes c11, c17, c23; cppStandard takes c++17, c++20, c++23. IntelliSense will parse your headers under the wrong language rules."}, {"pattern": "\"compileCommands\"\\s*:\\s*\"[^$\"]", "flags": "", "message": "compileCommands is given without ${workspaceFolder}. When the path cannot be resolved the C/C++ extension does not warn — it falls back to includePath guessing and you get red squiggles across files that compile fine. Write ${workspaceFolder}/build/compile_commands.json."}, {"pattern": "\"css\\.lint\\.unknownAtRules\"\\s*:\\s*\"(warning|error)\"", "flags": "", "message": "With this on, @tailwind and @apply are reported as unknown at-rules on every stylesheet you open, and the real CSS problems are buried in the noise. Set it to ignore.", "fix": "\"css.lint.unknownAtRules\": \"ignore\""}, {"pattern": "\"editor\\.defaultFormatter\"\\s*:\\s*\"[^\".]+\"", "flags": "", "message": "An extension id is always publisher.extension, with a dot. This value can never match an installed extension, so format-on-save does nothing at all and no message is shown. Example of the correct shape: esbenp.prettier-vscode."}, {"pattern": "\"(eslint\\.autoFixOnSave|prettier\\.eslintIntegration|prettier\\.tslintIntegration)\"", "flags": "", "message": "This setting was removed from the extension and is now read by nothing. Your files stop being fixed on save and the setting stays in the file looking correct. Use editor.codeActionsOnSave with source.fixAll.eslint instead."}, {"pattern": "\"source\\.fixAll(\\.[A-Za-z]+)?\"\\s*:\\s*(true|false)", "flags": "", "message": "The boolean form of a code action on save is deprecated. Use the string form — \"explicit\" to run only on an explicit save, \"always\" to include auto-saves, \"never\" to disable."}, {"pattern": "\"files\\.autoSave\"\\s*:\\s*\"afterDelay\"", "flags": "", "message": "afterDelay together with format-on-save reformats the file while you are still typing, which moves the cursor and can trigger a save-fix loop. onFocusChange gives the same safety without the interruption.", "fix": "\"files.autoSave\": \"onFocusChange\""}, {"pattern": "\"workbench\\.colorTheme\"\\s*:", "flags": "", "message": "A theme set in .vscode/settings.json is forced on everyone who opens this repository, overriding their own choice with no warning. Keep the theme in your User settings and put only workbench.colorCustomizations here."}, {"pattern": "\"key\"\\s*:\\s*\"cmd\\+", "flags": "i", "message": "cmd+ only binds on macOS. Teammates on Windows and Linux get no shortcut and nothing tells them why. Bind ctrl+ as well, or move the mac-only binding into your personal keybindings.json."}, {"pattern": "\"java\\.home\"\\s*:", "flags": "", "message": "java.home is deprecated. The language server now reads java.jdt.ls.java.home for its own runtime and java.configuration.runtimes for the project JDKs; this key alone leaves your MicroProfile project compiling against whatever JDK is first on PATH."}, {"pattern": "\"ASPNETCORE_ENVIRONMENT\"\\s*:\\s*\"Production\"", "flags": "", "message": "This debug configuration launches with the Production environment. The developer exception page is off, so an unhandled error shows a blank 500 instead of the stack trace, and appsettings.Production.json values are loaded on your machine. Use Development or Staging here."}];41function scan(t){var L=String(t).split(/\r?\n/),h=[],i,r,re;42 for(i=0;i<L.length;i++){for(var k=0;k<RULES.length;k++){r=RULES[k];43 try{re=new RegExp(r.pattern,r.flags||'')}catch(e){continue}44 if(re.test(L[i]))h.push({line:i+1,msg:r.message})}}45 return h}46document.getElementById('go').onclick=function(){47 var t=document.getElementById('src').value,o=document.getElementById('out');48 if(!t.trim()){o.innerHTML='';return}49 var h=scan(t);50 if(!h.length){o.innerHTML='<div class="ok">No configuration problems found in this file.</div>';return}51 var s='<table><tr><th>Line</th><th>Finding</th></tr>';52 for(var i=0;i<h.length;i++){s+='<tr><td class="n">'+h[i].line+'</td><td>'+53 String(h[i].msg).replace(/&/g,'&').replace(/</g,'<')+'</td></tr>'}54 o.innerHTML=s+'</table>'+'<p class="rest">'+h.length+' findings in this one file. A repository has more than one config file.</p>'+'<a class=\"buy\" href=\"https://getreadystack.com/api/buy/cl/polar_cl_Ge5u327gSZxIxtXPvdIVqBgdNtoieIuKZKWfV1LjjLp\"-theme=\"light\">Audit the whole repository — $29 one-off</a>'};55</script>56</html>57 58 59<section data-yj-install="free" style="margin:2rem auto 1rem;max-width:46rem;padding:1.25rem 1.25rem;border:1px solid #cfe3d6;border-radius:12px;background:#f6fbf8;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .4rem;font-size:1.2rem">Install free</h2><p style="margin:0 0 .8rem;color:#41505f">Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.</p><a href="https://www.npmjs.com/package/@readystack/gnu-global-cpp-vscode-config-pack" rel="noopener" data-yj-install-door="npm" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'gnu-global-cpp-vscode-config-pack',src:'npm',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">npm</a><a href="https://www.npmjs.com/package/@readystack/gnu-global-cpp-vscode-config-pack" rel="noopener" data-yj-install-door="mcp" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'gnu-global-cpp-vscode-config-pack',src:'mcp',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">MCP server (npx)</a><a href="https://hub.docker.com/r/getreadystack/gnu-global-cpp-vscode-config-pack" rel="noopener" data-yj-install-door="docker" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'gnu-global-cpp-vscode-config-pack',src:'docker',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">Docker Hub</a><pre style="margin:.5rem 0 0;padding:.6rem .8rem;background:#f3f5f8;border-radius:8px;font-size:.9rem;overflow:auto">npx @readystack/gnu-global-cpp-vscode-config-pack <file>60npx @readystack/gnu-global-cpp-vscode-config-pack --mcp61docker run --rm -v "$PWD:/w" getreadystack/gnu-global-cpp-vscode-config-pack /w</pre><p style="margin:.6rem 0 0;font-size:.92rem;color:#41505f"><a href="https://getreadystack.com/api/buy/cl/polar_cl_l6iN1uWt0FwWu7tBsczD0jWpP2vxFM54Wdwqb3KPi1G" rel="nofollow" style="color:#0f7b3f;text-decoration:underline">Team? One key for every ReadyStack linter, 5 seats, $149 once</a></p></section>62<section data-yj-alert="rule" style="margin:1rem auto 1.5rem;max-width:46rem;padding:1.1rem 1.25rem;border:1px solid #d9dee6;border-radius:12px;background:#fbfcfd;font:15px/1.55 system-ui,-apple-system,Segoe UI,sans-serif"><b style="font-size:1.05rem">Get the full rule table as a PDF</b><div style="opacity:.78;margin:.35rem 0 .8rem">All 21 rules GNU Global C/C++ .vscode Config Pack checks, each with its source and date, on printable pages you can hand to your team or auditor. We email it now, and once more only if a rule changes. No newsletter.</div><div style="display:flex;gap:8px;flex-wrap:wrap"><input id="yjae" type="email" placeholder="you@example.com" style="flex:1;min-width:210px;padding:11px 13px;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:#fff;color:inherit"><button id="yjab" style="padding:11px 18px;border-radius:8px;border:0;cursor:pointer;background:#0f7b3f;color:#fff;font:600 15px system-ui,sans-serif">Email me the PDF</button></div><div id="yjao" hidden style="margin-top:.6rem;color:#0f7b3f">Sent. It arrives within the hour - check spam too.</div><script>(function(){var b=document.getElementById("yjab"),e=document.getElementById("yjae");if(!b||!e)return;b.addEventListener("click",function(){var v=e.value.trim();if(!/.+@.+\..+/.test(v))return;try{localStorage.setItem("yj_em","1");}catch(_){}fetch(location.origin+"/api/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:v,slug:"gnu-global-cpp-vscode-config-pack",lang:"en",source:"rule_table"+((b.closest&&b.closest("section")&&b.closest("section").getAttribute("data-yj-moved"))?"_at_result":"")})}).then(function(r){var o=document.getElementById("yjao");o.hidden=false;if(!r.ok){o.textContent="Could not save - please try again.";}}).catch(function(){var o=document.getElementById("yjao");o.hidden=false;o.textContent="Could not save - please try again.";});});})();</script><script>(function(){var e=document.getElementById("yjae"),s=e&&e.closest?e.closest("section"):null,o=document.getElementById("out");if(!s||!o)return;var d=false;function mv(ev){if(d)return;if(ev&&ev.target&&s.contains(ev.target))return;d=true;var b=o;while(b.parentNode&&b.parentNode!==document.body&&b.parentNode.tagName!=="MAIN"&&b.parentNode.tagName!=="ARTICLE")b=b.parentNode;if(!b.parentNode||b===s||b.contains(s))return;try{b.parentNode.insertBefore(s,b.nextSibling);s.setAttribute("data-yj-moved","1");}catch(_){}}document.addEventListener("input",mv,true);document.addEventListener("change",mv,true);})();</script></section>63 64<section data-yj-cta="paid" style="margin:3rem auto;max-width:46rem;padding:1.5rem 1.25rem;border:1px solid #d8dee9;border-radius:12px;background:#fbfcfe;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .5rem;font-size:1.25rem">Get the complete version <span class="yj-price">$29</span></h2><p style="margin:.25rem 0 1rem;color:#41505f">This page is the working piece. The full pack has everything below.</p><p style="margin:0 0 1rem;color:#41505f">21 rules that read the values in a shared .vscode folder, plus 45 snippets. VS Code loads a wrong value without a word - this names the line and the fix.</p><p style="margin:0 0 1rem;color:#5b6b7c;font-size:.94rem">A freelance senior software engineer in the US averages $101/hour in 2026 (contractrates.fyi; mid-level ~$73/hour). Finding one silently-ignored .vscode value by hand costs more than an hour of that.</p><a href="https://getreadystack.com/api/buy/cl/polar_cl_Ge5u327gSZxIxtXPvdIVqBgdNtoieIuKZKWfV1LjjLp" rel="nofollow" style="display:inline-block;padding:.7rem 1.3rem;border-radius:8px;background:#1b64f2;color:#fff;text-decoration:none;font-weight:600">Buy the full version — $29</a></section>65<!--yj-share-s101--><div style="margin:28px 0 8px;text-align:center"><button id="yjcp" type="button" style="font:inherit;padding:10px 18px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Copy link</button><button id="yjimg" type="button" style="font:inherit;padding:10px 18px;margin-left:8px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Save result as image</button></div><script>(function(){var b=document.getElementById("yjimg");if(!b)return;b.addEventListener("click",function(){var o=document.getElementById("out");var txt=(o&&(o.innerText||o.textContent)||"").trim();if(!txt){b.textContent="(no result yet)";setTimeout(function(){b.textContent="Save result as image";},1500);return;}var lines=txt.split(String.fromCharCode(10)).filter(function(x){return x.trim();}).slice(0,10);var W=1200,P=56,c=document.createElement("canvas");c.width=W;var lh=38,H=P*2+70+lines.length*lh+60;c.height=H;var x=c.getContext("2d");x.fillStyle="#1a1512";x.fillRect(0,0,W,H);x.fillStyle="#f3e9d2";x.font="600 34px system-ui,Segoe UI,Arial";var t=(document.title||"").split("|")[0].trim();x.fillText(t.slice(0,54),P,P+34);x.font="22px ui-monospace,Menlo,Consolas,monospace";x.fillStyle="#e8dcc4";for(var i=0;i<lines.length;i++){x.fillText(lines[i].slice(0,88),P,P+70+i*lh+22);}x.font="600 22px system-ui,Segoe UI,Arial";x.fillStyle="#c9a227";var d=location.hostname.replace("www.","");x.fillText(d,W-P-x.measureText(d).width,H-P+6);c.toBlob(function(bl){var u=URL.createObjectURL(bl),a=document.createElement("a");a.href=u;a.download=(t||"result").replace(/[^a-z0-9]+/gi,"-").toLowerCase()+"-"+d+".png";document.body.appendChild(a);a.click();setTimeout(function(){URL.revokeObjectURL(u);a.remove();},2000);},"image/png");});})();</script><script>(function(){var b=document.getElementById("yjcp");if(!b)return;var t=b.textContent;b.addEventListener("click",function(){var u=location.href.split("#")[0];function d(){b.textContent="Link copied";setTimeout(function(){b.textContent=t;},1800);}if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(u).then(d,function(){prompt("",u);});}else{prompt("",u);}});})();</script><div class="yj-home-find"><div class="yj-lgbar"><a href="/" class="yj-lg on">EN</a><a href="/de/" class="yj-lg">DE</a><a href="/ja/" class="yj-lg">JA</a><a href="/es/" class="yj-lg">ES</a><a href="/pt/" class="yj-lg">PT</a></div><section class="yj-find"><h2>Find a tool</h2><input id="yjq" type="search" autocomplete="off" placeholder="Type a product name, format or task"><div id="yjr"></div></section><style>.yj-lgbar{position:absolute;top:14px;right:18px;display:flex;gap:6px;z-index:60}.yj-lg{font:600 12px/1 system-ui,sans-serif;padding:6px 9px;border-radius:4px;text-decoration:none;color:#8b96a3;border:1px solid rgba(140,150,165,.28)}.yj-lg:hover{color:#e8eaed;border-color:rgba(160,175,195,.6)}.yj-lg.on{color:#0e1116;background:#cfd6de;border-color:#cfd6de}.yj-find{max-width:760px;margin:34px auto 8px;padding:0 20px}.yj-find h2{font:600 20px/1.3 system-ui,sans-serif;margin:0 0 10px}#yjq{width:100%;box-sizing:border-box;padding:13px 15px;font:400 15.5px system-ui,sans-serif;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:rgba(255,255,255,.04);color:inherit}#yjq:focus{outline:none;border-color:#7FD1C4}#yjr{margin-top:10px;display:flex;flex-direction:column;gap:6px}#yjr a{display:flex;justify-content:space-between;gap:12px;padding:11px 14px;border:1px solid rgba(140,150,165,.22);border-radius:6px;text-decoration:none;font:400 14.5px/1.4 system-ui,sans-serif;color:inherit}#yjr a:hover{border-color:#7FD1C4}#yjr .pr{font:600 13px system-ui,sans-serif;color:#5fbf9a;white-space:nowrap}</style><script>(function(){var q=document.getElementById("yjq"),r=document.getElementById("yjr"),D=null;function load(){if(D)return Promise.resolve(D);return fetch("/search-index.json").then(function(x){return x.json();}).then(function(j){D=j;return j;}).catch(function(){D=[];return D;});}function esc(t){return String(t).replace(/[&<>"]/g,function(c){return {"&":"&","<":"<",">":">",'"':"""}[c];});}function run(){var v=q.value.trim().toLowerCase();if(v.length<2){r.innerHTML="";return;}load().then(function(j){var w=v.split(/\s+/),o=[];for(var i=0;i<j.length&&o.length<12;i++){var t=j[i].t.toLowerCase();var ok=true;for(var k=0;k<w.length;k++){if(t.indexOf(w[k])<0){ok=false;break;}}if(ok)o.push(j[i]);}r.innerHTML=o.length?o.map(function(x){return "<a href=\""+esc(x.u)+"\">"+"<span>"+esc(x.t)+"</span>"+(x.p?"<span class=\"pr\">$"+x.p+"</span>":"")+"</a>";}).join(""):"";});}q.addEventListener("input",run);q.addEventListener("focus",load);})();</script></div>66 67 68<script data-yj="yj-view-beacon">(function(){try{var p=location.pathname;var k='yjv:'+p;if(sessionStorage.getItem(k))return;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",ref:(document.referrer||''),src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}catch(e){}})();</script>69 70<script data-yj="yj-use-beacon">(function(){try{var o=document.getElementById('out');if(!o)return;var p=location.pathname,k='yju:'+p,sent=false;function fire(){if(sent||sessionStorage.getItem(k))return;if(!(o.textContent||'').replace(/\s+/g,'').length)return;sent=true;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",t:'use',src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}var mo=new MutationObserver(function(){fire();if(sent)mo.disconnect();});mo.observe(o,{childList:true,characterData:true,subtree:true});}catch(e){}})();</script>71<section data-yj="yj-facts-v1" style="max-width:920px;margin:48px auto 0;padding:0 20px;font-family:system-ui,sans-serif"><style>.yj-article p{font:400 15.5px/1.7 system-ui,sans-serif;color:#26313b;margin:0 0 12px;max-width:72ch}.yj-article h2,.yj-article h3,.yj-article h4{font:600 17px/1.35 system-ui,sans-serif;color:#1b1f24;margin:22px 0 8px}.yj-article table{border-collapse:collapse;margin:10px 0 16px;font:14px/1.45 system-ui,sans-serif}.yj-article th,.yj-article td{border:1px solid #e2e6ea;padding:6px 10px;text-align:left}.yj-article th{background:#f4f6f8}.yj-article pre{background:#0f1720;color:#e6edf3;padding:12px 14px;border-radius:8px;overflow:auto;font:13px/1.5 ui-monospace,Menlo,monospace}.yj-article code{font:13px ui-monospace,Menlo,monospace;background:#f1f3f5;padding:1px 4px;border-radius:3px}.yj-article pre code{background:none;padding:0}.yj-article ul,.yj-article ol{font:15px/1.6 system-ui,sans-serif;color:#26313b}</style><p style="font:400 13px/1.5 system-ui,sans-serif;color:#6b7680;margin:0 0 14px"><time datetime="2026-09-08">Updated 2026-09-08</time> · ReadyStack</p><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","dateModified":"2026-09-08","author":{"@type":"Organization","name":"ReadyStack"}}</script><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">Worked example</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 16px;color:#5b6570">Real numbers from this tool, line by line.</p><div class="yj-article"><p><img src="https://getreadystack.com/img/promo/sku11459_result_card.jpg" alt="The .vscode settings VS Code accepts, loads, and then ignores" loading="lazy" style="max-width:100%;border-radius:6px"></p>72<p>There is no error message. That is the whole problem.</p>73<p>Open a <code>.vscode/settings.json</code> that a teammate committed six months ago and you will not find a red squiggle anywhere in it. The file is valid JSON. Every key is a real key. VS Code reads it top to bottom, accepts it, and then quietly does nothing with about a third of it.</p>74<p>Here is the one that costs the most hours:</p>75<pre><code>{76 "editor.formatOnSave": true,77 "editor.defaultFormatter": "prettier"78}</code></pre>79<p>An extension id is always <code>publisher.extension</code>, with a dot. <code>prettier</code> is not an id, it is a word. There is no extension it can ever match, so format-on-save runs, finds no formatter, and returns. Nobody is told. The team concludes that format-on-save is unreliable and turns it off.</p>80<p>The same shape repeats across the whole folder:</p>81<pre><code>{82 "cwd": "${workspaceRoot}/build",83 "clangPath": "~/llvm/bin/clang",84 "intelliSenseMode": "gcc-x64",85 "cStandard": "c++17",86 "console": "internalConsole"87}</code></pre>88<p><code>${workspaceRoot}</code> is the deprecated name and newer releases resolve it inconsistently, so the path can come out empty and your task runs in the wrong folder. VS Code does not expand a leading tilde in JSON, so <code>~/llvm/bin/clang</code> resolves to a literal folder called <code>~</code> and the setting does nothing at all. <code>gcc-x64</code> is the pre-platform form of <code>intelliSenseMode</code>; the current values carry the platform first, <code>linux-gcc-x64</code>, and the old one falls back to a guess, so your defines and include search can differ from the compiler that actually builds. <code>cStandard</code> takes <code>c11</code>, <code>c17</code>, <code>c23</code> - a C++ standard put there makes IntelliSense parse your headers under the wrong language rules. And <code>internalConsole</code> cannot take keyboard input, so a program that reads stdin blocks forever and looks hung.</p>89<p>Every one of those is valid JSON with a known key. A linter checks the shape of a file, and a wrong value is a perfectly shaped value.</p>90<p>The cost is not the fix, which takes seconds once you know. The cost is the finding. Nothing points at the line. You notice weeks later, usually on the day a new person clones the repository and their IntelliSense is red in files that compile fine, or the day a VS Code update stops resolving a deprecated name that had been limping along.</p>91<p>So we wrote the check as an extension, and put the same 21 rules on a web page you can paste into. It reads the values. It gives you the line number and what the value should be instead. The free side runs all 21 rules on the file you have open, and inserts any of 45 ready snippets for gtags tasks, c_cpp_properties, formatter save-actions, Dark+ overrides, Tailwind, ASP.NET Core launch profiles and MicroProfile Java. No key, nothing held back.</p>92<p>The part worth paying for is not the answer - it is scale. One file is a coffee break. A repository with forty config files across a monorepo, exported as CSV for a review, with your own team rules checked alongside the built-in 21, is the thing you cannot do by hand for less than the price of an hour of senior developer time.</p>93<p>One last rule, because it is the one that stops being a nuisance and starts being an incident:</p>94<pre><code>{ "githubToken": "ghp_..." }</code></pre>95<p>In a file that lives in the repository. The moment that is pushed the token is public, GitHub revokes leaked tokens automatically, and your gist and repo access stops. Nothing in the editor warns you before the push. That check is free too.</p></div><h2 style="font:600 19px/1.3 system-ui,sans-serif;margin:30px 0 10px;color:#1b1f24">15 seconds — what it actually does</h2><video controls muted playsinline preload="none" poster="/img/promo/sku11459_result_card.jpg" style="width:100%;max-width:360px;border-radius:10px;display:block;margin:0 auto"><source src="/media/sku11459_short.mp4" type="video/mp4"></video><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:34px 0 6px;color:#1b1f24">Questions people ask</h2><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What does this actually check in a .vscode file?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">It reads the values, not the syntax. 21 rules catch settings that VS Code loads without complaint and then ignores: ${workspaceRoot} instead of ${workspaceFolder}, a defaultFormatter id with no dot in it, a C++ standard placed in cStandard, a leading tilde in a path, tasks.json still on schema 0.1.0, and a committed GitHub token.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Who is this for?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">C and C++ teams on VS Code who commit a .vscode folder to the repository, especially ones using GNU Global gtags for indexing. It also covers the other setups that end up in the same folder: c_cpp_properties IntelliSense, formatter save-actions, Dark+ colour overrides, Tailwind, ASP.NET Core launch profiles and MicroProfile Java.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Why will a JSON linter or a chat assistant not do this?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">A linter checks shape. It confirms the file is valid JSON with known keys, and a wrong value is valid JSON. It cannot know that esbenp.prettier-vscode is an extension id and prettier is not, or that gcc-x64 stopped being the current form of intelliSenseMode. This pack carries the resolved answer for each of 21 cases and runs offline on your file.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What is free and what needs a licence?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Free covers one file completely: all 21 rules run on the config file you have open, every finding is reported with its line, and all 45 snippets insert at the cursor. No key is asked for and nothing is held back. A licence adds the repository-wide scan, the exported findings file, and your own custom rules.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What would this cost done by hand?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">A freelance senior software engineer in the US averages $101 an hour in 2026, mid-level about $73. Tracking down one config value that VS Code accepts and quietly ignores usually costs more than an hour, because nothing reports an error - you only notice that formatting or IntelliSense never ran. The pack is $29 once.</p></details><script type="application/ld+json" data-yj="yj-faq-ld">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "What does this actually check in a .vscode file?", "acceptedAnswer": {"@type": "Answer", "text": "It reads the values, not the syntax. 21 rules catch settings that VS Code loads without complaint and then ignores: ${workspaceRoot} instead of ${workspaceFolder}, a defaultFormatter id with no dot in it, a C++ standard placed in cStandard, a leading tilde in a path, tasks.json still on schema 0.1.0, and a committed GitHub token."}}, {"@type": "Question", "name": "Who is this for?", "acceptedAnswer": {"@type": "Answer", "text": "C and C++ teams on VS Code who commit a .vscode folder to the repository, especially ones using GNU Global gtags for indexing. It also covers the other setups that end up in the same folder: c_cpp_properties IntelliSense, formatter save-actions, Dark+ colour overrides, Tailwind, ASP.NET Core launch profiles and MicroProfile Java."}}, {"@type": "Question", "name": "Why will a JSON linter or a chat assistant not do this?", "acceptedAnswer": {"@type": "Answer", "text": "A linter checks shape. It confirms the file is valid JSON with known keys, and a wrong value is valid JSON. It cannot know that esbenp.prettier-vscode is an extension id and prettier is not, or that gcc-x64 stopped being the current form of intelliSenseMode. This pack carries the resolved answer for each of 21 cases and runs offline on your file."}}, {"@type": "Question", "name": "What is free and what needs a licence?", "acceptedAnswer": {"@type": "Answer", "text": "Free covers one file completely: all 21 rules run on the config file you have open, every finding is reported with its line, and all 45 snippets insert at the cursor. No key is asked for and nothing is held back. A licence adds the repository-wide scan, the exported findings file, and your own custom rules."}}, {"@type": "Question", "name": "What would this cost done by hand?", "acceptedAnswer": {"@type": "Answer", "text": "A freelance senior software engineer in the US averages $101 an hour in 2026, mid-level about $73. Tracking down one config value that VS Code accepts and quietly ignores usually costs more than an hour, because nothing reports an error - you only notice that formatting or IntelliSense never ran. The pack is $29 once."}}]}</script><div id="yj-ask" style="margin:36px 0 0;padding:18px 18px 16px;border:1px solid #e2e6ea;border-radius:10px;background:#fbfbfc"><h2 style="font:600 19px/1.3 system-ui,sans-serif;margin:0 0 4px;color:#1b1f24">Ask about this tool</h2><p style="font:400 13.5px/1.5 system-ui,sans-serif;margin:0 0 12px;color:#5b6570">One question, answered by the person who built it. Your email only if you want the answer sent.</p><form onsubmit="return yjAsk(event)" style="display:grid;gap:8px"><textarea name="question" required minlength="10" maxlength="2000" rows="3" placeholder="Your question" style="font:14px/1.5 system-ui,sans-serif;padding:10px;border:1px solid #cfd6dd;border-radius:6px"></textarea><div style="display:flex;gap:8px;flex-wrap:wrap"><input type="email" name="email" placeholder="Email (optional)" style="flex:1;min-width:200px;font:14px system-ui,sans-serif;padding:9px 10px;border:1px solid #cfd6dd;border-radius:6px"><button type="submit" style="font:600 14px system-ui,sans-serif;padding:9px 18px;border:0;border-radius:6px;background:#1b1f24;color:#fff;cursor:pointer">Send</button></div><p id="yj-ask-msg" style="font:13px system-ui,sans-serif;margin:2px 0 0;color:#0a6238;min-height:1em"></p></form><script>function yjAsk(e){e.preventDefault();var f=e.target,m=document.getElementById("yj-ask-msg");m.style.color="#0a6238";fetch(location.origin+"/api/ask",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sku:11459,slug:"gnu-global-cpp-vscode-config-pack",lang:"en",question:f.question.value,email:f.email.value,page:location.pathname})}).then(function(r){if(!r.ok)throw 0;m.textContent="Thanks \u2014 noted. Answers land on this page and, if you left an email, in your inbox.";f.question.value="";}).catch(function(){m.style.color="#a8551f";m.textContent="Could not send. Please try again in a minute.";});return false;}</script></div></section><section class="yj-related" style="max-width:920px;margin:56px auto 40px;padding:0 20px"><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">Same job, next tool</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 20px;color:#5b6570">Free in the browser. The full version is a one-time licence.</p><div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px"><a class="yj-rel-c" href="https://getreadystack.com/tools/devicetree-config-language-pack"><span class="yj-rel-t">DeviceTree Config Audit: 23 dtc-Style Rules, 50 Snippets</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/config-dsl-lint-snippet-pack"><span class="yj-rel-t">Config & DSL Lint + Snippets — 9 Sets</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/autohotkey-toml-devicetree-snippets"><span class="yj-rel-t">AutoHotkey v2, TOML and DeviceTree checks for VS Code</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/bulk-sender-lint"><span class="yj-rel-t">Bulk Sender Lint - the Gmail, Yahoo and Outlook.com rules, checked in your mai</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/dotnet-eol-support-gate"><span class="yj-rel-t">.NET EOL & CRA Support Window Gate</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/robots-txt-ai-crawler-audit"><span class="yj-rel-t">AI Crawler Rules - robots.txt Audit for AI Search</span><span class="yj-rel-p">$29</span></a></div><style>.yj-rel-c{display:flex;flex-direction:column;gap:8px;padding:15px 16px;border:1px solid #e2e6ea;border-radius:6px;text-decoration:none;background:#fff}.yj-rel-c:hover{border-color:#b9c2cb;background:#fafbfc}.yj-rel-t{font:500 14.5px/1.42 system-ui,sans-serif;color:#1b1f24}.yj-rel-p{font:600 13px system-ui,sans-serif;color:#0a6238}</style></section>