<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-28 --> <p>Modern development workflows demand sophisticated editor support for productivity, code quality, and developer experience. Geode provides comprehensive editor integrations through Language Server Protocol (LSP) implementations, syntax highlighting packages, intelligent auto-completion, real-time diagnostics, and query execution capabilities across all major editors and IDEs.</p> <p>Whether you prefer Visual Studio Code, Neovim, classic Vim, Emacs, JetBrains IDEs, Sublime Text, or any LSP-compatible editor, Geode&rsquo;s tooling ecosystem ensures you have the rich development experience developers expect from enterprise database platforms.</p> <p>This guide provides an overview of available editor integrations, common features, installation approaches, and guidance on choosing the right tools for your workflow.</p> <h3 id="available-integrations" class="position-relative d-flex align-items-center group"> <span>Available Integrations</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="available-integrations" aria-haspopup="dialog" aria-label="Share link: Available Integrations"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden> <div class="hsm-dialog" role="document"> <div class="hsm-header"> <h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2> <button type="button" class="hsm-close" aria-label="Close"> <i class="fa-solid fa-xmark"></i> </button> </div> <div class="hsm-body"> <label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label> <div class="input-group mb-4 hsm-url-group"> <input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" /> <button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy"> <i class="fa-duotone fa-clipboard" aria-hidden="true"></i> </button> </div> <div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div> <div class="hsm-share-grid"> <a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-twitter me-2"></i>Twitter </a> <a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-linkedin me-2"></i>LinkedIn </a> <a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-facebook me-2"></i>Facebook </a> </div> </div> </div> </div> <style> .heading-share-modal { position: fixed; inset: 0; display: flex; justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.6); z-index: 1050; padding: 1rem; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .heading-share-modal[hidden] { display: none !important; } .hsm-dialog { max-width: 420px; width: 100%; background: var(--bs-body-bg, #fff); color: var(--bs-body-color, #212529); border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); border-radius: 1rem; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; animation: hsm-fade-in 0.2s ease-out; } @keyframes hsm-fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } [data-bs-theme="dark"] .hsm-dialog { background: #1e293b; border-color: rgba(255,255,255,0.1); color: #f8f9fa; } .hsm-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); background: rgba(0,0,0,0.02); } [data-bs-theme="dark"] .hsm-header { background: rgba(255,255,255,0.02); border-color: rgba(255,255,255,0.1); } .hsm-close { background: transparent; border: none; color: inherit; opacity: 0.5; padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 1.2rem; line-height: 1; transition: opacity 0.2s; } .hsm-close:hover { opacity: 1; } .hsm-body { padding: 1.5rem; } .hsm-url-group { display: flex !important; align-items: stretch; } .hsm-url-group .form-control { flex: 1; min-width: 0; margin: 0; background: var(--bs-secondary-bg, #f8f9fa); border-color: var(--bs-border-color, #dee2e6); border-top-right-radius: 0; border-bottom-right-radius: 0; height: 42px; } .hsm-url-group .btn { flex: 0 0 auto; margin: 0; margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; height: 42px; display: flex; align-items: center; justify-content: center; padding: 0 1.25rem; z-index: 2; } [data-bs-theme="dark"] .hsm-url-group .form-control { background: #0f172a; border-color: #334155; color: #e2e8f0; } .hsm-share-grid { display: flex; flex-direction: column; gap: 0.5rem; } .hsm-share-grid .btn { display: flex; align-items: center; justify-content: center; font-size: 0.9rem; padding: 0.6rem; border-color: var(--bs-border-color); width: 100%; } [data-bs-theme="dark"] .hsm-share-grid .btn { color: #e2e8f0; border-color: #475569; } [data-bs-theme="dark"] .hsm-share-grid .btn:hover { background: #334155; border-color: #cbd5e1; } </style> <script> (function(){ const modal = document.getElementById('headingShareModal'); if(!modal) return; const input = modal.querySelector('#headingShareInput'); const copyBtn = modal.querySelector('.hsm-copy'); const twitter = modal.querySelector('#share-twitter'); const linkedin = modal.querySelector('#share-linkedin'); const facebook = modal.querySelector('#share-facebook'); const closeBtn = modal.querySelector('.hsm-close'); let lastFocus=null; let trapBound=false; function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; } function isOpen(){ return !modal.hasAttribute('hidden'); } function hydrate(id){ const url=buildUrl(id); input.value=url; const enc=encodeURIComponent(url); const text=encodeURIComponent(document.title); if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`; if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`; if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`; } function openModal(id){ lastFocus=document.activeElement; hydrate(id); if(!isOpen()){ modal.removeAttribute('hidden'); } requestAnimationFrame(()=>{ input.focus(); }); trapFocus(); } function closeModal(){ if(!isOpen()) return; modal.setAttribute('hidden',''); if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus(); } function copyCurrent(){ try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); } catch(e){ fallback(); } } function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} } function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); } function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); } function bindShareButtons(){ document.querySelectorAll('.h-share').forEach(btn=>{ if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; } }); } bindShareButtons(); if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', bindShareButtons); } else { requestAnimationFrame(bindShareButtons); } document.addEventListener('click', function(e){ const shareBtn=e.target.closest && e.target.closest('.h-share'); if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); } }, true); document.addEventListener('click', e=>{ if(e.target===modal) closeModal(); if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); } if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); } }); document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); }); function trapFocus(){ if(trapBound) return; trapBound=true; modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } }); } if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); }); })(); </script> <h4 id="visual-studio-code" class="position-relative d-flex align-items-center group"> <span>Visual Studio Code</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="visual-studio-code" aria-haspopup="dialog" aria-label="Share link: Visual Studio Code"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>The most feature-rich integration with full graphical support:</p> <table> <thead> <tr> <th>Feature</th> <th>Support</th> </tr> </thead> <tbody> <tr> <td>Syntax Highlighting</td> <td>Full</td> </tr> <tr> <td>LSP Integration</td> <td>Full</td> </tr> <tr> <td>Auto-Completion</td> <td>Full</td> </tr> <tr> <td>Diagnostics</td> <td>Full</td> </tr> <tr> <td>Hover Documentation</td> <td>Full</td> </tr> <tr> <td>Go to Definition</td> <td>Full</td> </tr> <tr> <td>Find References</td> <td>Full</td> </tr> <tr> <td>Query Execution</td> <td>Full</td> </tr> <tr> <td>Result Visualization</td> <td>Table, Graph, JSON</td> </tr> <tr> <td>Schema Explorer</td> <td>Sidebar</td> </tr> <tr> <td>Debugging</td> <td>Full</td> </tr> <tr> <td>Snippets</td> <td>Built-in + Custom</td> </tr> </tbody> </table> <p><strong>Installation</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">code --install-extension geodedb.geode-gql </span></span></code></pre></div><p><strong>Best For</strong>: Developers who want a full-featured GUI experience with graph visualization and integrated debugging.</p> <p><a href="/tags/vscode/" >Detailed VS Code Guide</a> </p> <h4 id="neovim" class="position-relative d-flex align-items-center group"> <span>Neovim</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="neovim" aria-haspopup="dialog" aria-label="Share link: Neovim"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Modern, Lua-based integration with native LSP support:</p> <table> <thead> <tr> <th>Feature</th> <th>Support</th> </tr> </thead> <tbody> <tr> <td>Syntax Highlighting</td> <td>Tree-sitter</td> </tr> <tr> <td>LSP Integration</td> <td>Native</td> </tr> <tr> <td>Auto-Completion</td> <td>nvim-cmp</td> </tr> <tr> <td>Diagnostics</td> <td>Full</td> </tr> <tr> <td>Hover Documentation</td> <td>Full</td> </tr> <tr> <td>Go to Definition</td> <td>Full</td> </tr> <tr> <td>Find References</td> <td>Full</td> </tr> <tr> <td>Query Execution</td> <td>Full</td> </tr> <tr> <td>Result Display</td> <td>Split/Float</td> </tr> <tr> <td>Schema Explorer</td> <td>Telescope</td> </tr> <tr> <td>Snippets</td> <td>LuaSnip</td> </tr> </tbody> </table> <p><strong>Installation</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-lua" data-lang="lua"><span class="line"><span class="cl"><span class="c1">-- lazy.nvim</span> </span></span><span class="line"><span class="cl"><span class="p">{</span> <span class="s2">&#34;geodedb/geode.nvim&#34;</span><span class="p">,</span> <span class="n">dependencies</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">&#34;nvim-lspconfig&#34;</span> <span class="p">}</span> <span class="p">}</span> </span></span></code></pre></div><p><strong>Best For</strong>: Developers who prefer modal editing, terminal workflows, and extensive customization through Lua.</p> <p><a href="/tags/neovim/" >Detailed Neovim Guide</a> </p> <h4 id="vim" class="position-relative d-flex align-items-center group"> <span>Vim</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="vim" aria-haspopup="dialog" aria-label="Share link: Vim"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Classic Vim support with omni-completion and ALE integration:</p> <table> <thead> <tr> <th>Feature</th> <th>Support</th> </tr> </thead> <tbody> <tr> <td>Syntax Highlighting</td> <td>Vimscript</td> </tr> <tr> <td>LSP Integration</td> <td>vim-lsp</td> </tr> <tr> <td>Auto-Completion</td> <td>Omni-func</td> </tr> <tr> <td>Diagnostics</td> <td>ALE</td> </tr> <tr> <td>Hover Documentation</td> <td>vim-lsp</td> </tr> <tr> <td>Query Execution</td> <td>Full</td> </tr> <tr> <td>Result Display</td> <td>Split</td> </tr> <tr> <td>Snippets</td> <td>UltiSnips</td> </tr> </tbody> </table> <p><strong>Installation</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-vim" data-lang="vim"><span class="line"><span class="cl"><span class="nx">Plug</span> <span class="s1">&#39;geodedb/vim-geode-gql&#39;</span> </span></span></code></pre></div><p><strong>Best For</strong>: Traditional Vim users who prefer stability and broad compatibility.</p> <p><a href="/tags/vim/" >Detailed Vim Guide</a> </p> <h4 id="jetbrains-ides-intellij-datagrip" class="position-relative d-flex align-items-center group"> <span>JetBrains IDEs (IntelliJ, DataGrip)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="jetbrains-ides-intellij-datagrip" aria-haspopup="dialog" aria-label="Share link: JetBrains IDEs (IntelliJ, DataGrip)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Professional IDE integration with database tooling:</p> <table> <thead> <tr> <th>Feature</th> <th>Support</th> </tr> </thead> <tbody> <tr> <td>Syntax Highlighting</td> <td>Full</td> </tr> <tr> <td>Auto-Completion</td> <td>Full</td> </tr> <tr> <td>Diagnostics</td> <td>Full</td> </tr> <tr> <td>Database Explorer</td> <td>Full</td> </tr> <tr> <td>Query Console</td> <td>Full</td> </tr> <tr> <td>Result Viewer</td> <td>Table, Graph</td> </tr> <tr> <td>Schema Introspection</td> <td>Full</td> </tr> <tr> <td>Live Templates</td> <td>Full</td> </tr> </tbody> </table> <p><strong>Installation</strong>: Settings → Plugins → Search &ldquo;Geode GQL&rdquo;</p> <p><strong>Best For</strong>: Teams already using JetBrains IDEs who want integrated database tooling.</p> <h4 id="emacs" class="position-relative d-flex align-items-center group"> <span>Emacs</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="emacs" aria-haspopup="dialog" aria-label="Share link: Emacs"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Emacs integration via lsp-mode:</p> <table> <thead> <tr> <th>Feature</th> <th>Support</th> </tr> </thead> <tbody> <tr> <td>Syntax Highlighting</td> <td>Major Mode</td> </tr> <tr> <td>LSP Integration</td> <td>lsp-mode</td> </tr> <tr> <td>Auto-Completion</td> <td>company-mode</td> </tr> <tr> <td>Diagnostics</td> <td>Flycheck</td> </tr> <tr> <td>Query Execution</td> <td>Full</td> </tr> </tbody> </table> <p><strong>Installation</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-elisp" data-lang="elisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">use-package</span> <span class="nv">geode-gql-mode</span> </span></span><span class="line"><span class="cl"> <span class="nb">:ensure</span> <span class="no">t</span> </span></span><span class="line"><span class="cl"> <span class="nb">:mode</span> <span class="s">&#34;\\.gql\\&#39;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="nb">:hook</span> <span class="p">(</span><span class="nv">geode-gql-mode</span> <span class="o">.</span> <span class="nv">lsp</span><span class="p">))</span> </span></span></code></pre></div><p><strong>Best For</strong>: Emacs users who want consistent LSP integration.</p> <h4 id="sublime-text" class="position-relative d-flex align-items-center group"> <span>Sublime Text</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="sublime-text" aria-haspopup="dialog" aria-label="Share link: Sublime Text"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Lightweight integration via LSP package:</p> <table> <thead> <tr> <th>Feature</th> <th>Support</th> </tr> </thead> <tbody> <tr> <td>Syntax Highlighting</td> <td>Full</td> </tr> <tr> <td>LSP Integration</td> <td>LSP Package</td> </tr> <tr> <td>Auto-Completion</td> <td>Full</td> </tr> <tr> <td>Diagnostics</td> <td>Full</td> </tr> </tbody> </table> <p><strong>Installation</strong>: Package Control → Install &ldquo;Geode GQL&rdquo;</p> <p><strong>Best For</strong>: Users who prefer a lightweight, fast editor.</p> <h4 id="helix" class="position-relative d-flex align-items-center group"> <span>Helix</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="helix" aria-haspopup="dialog" aria-label="Share link: Helix"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Modern terminal editor with built-in LSP:</p> <table> <thead> <tr> <th>Feature</th> <th>Support</th> </tr> </thead> <tbody> <tr> <td>Syntax Highlighting</td> <td>Tree-sitter</td> </tr> <tr> <td>LSP Integration</td> <td>Built-in</td> </tr> <tr> <td>Auto-Completion</td> <td>Built-in</td> </tr> <tr> <td>Diagnostics</td> <td>Built-in</td> </tr> </tbody> </table> <p><strong>Configuration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="c"># ~/.config/helix/languages.toml</span> </span></span><span class="line"><span class="cl"><span class="p">[[</span><span class="nx">language</span><span class="p">]]</span> </span></span><span class="line"><span class="cl"><span class="nx">name</span> <span class="p">=</span> <span class="s2">&#34;gql&#34;</span> </span></span><span class="line"><span class="cl"><span class="nx">language-server</span> <span class="p">=</span> <span class="p">{</span> <span class="nx">command</span> <span class="p">=</span> <span class="s2">&#34;geode&#34;</span><span class="p">,</span> <span class="nx">args</span> <span class="p">=</span> <span class="p">[</span><span class="s2">&#34;lsp&#34;</span><span class="p">,</span> <span class="s2">&#34;--stdio&#34;</span><span class="p">]</span> <span class="p">}</span> </span></span></code></pre></div><p><strong>Best For</strong>: Users exploring modern terminal-based editors.</p> <h3 id="language-server-protocol-lsp" class="position-relative d-flex align-items-center group"> <span>Language Server Protocol (LSP)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="language-server-protocol-lsp" aria-haspopup="dialog" aria-label="Share link: Language Server Protocol (LSP)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="overview" class="position-relative d-flex align-items-center group"> <span>Overview</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="overview" aria-haspopup="dialog" aria-label="Share link: Overview"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Geode implements the Language Server Protocol, enabling consistent language intelligence across all LSP-compatible editors. The LSP provides:</p> <ul> <li><strong>Syntax Highlighting</strong>: Context-aware colorization</li> <li><strong>Auto-Completion</strong>: Keywords, labels, properties, functions</li> <li><strong>Diagnostics</strong>: Errors, warnings, hints</li> <li><strong>Hover Information</strong>: Documentation on hover</li> <li><strong>Go to Definition</strong>: Navigate to bindings</li> <li><strong>Find References</strong>: Locate all usages</li> <li><strong>Rename Symbol</strong>: Rename across queries</li> <li><strong>Code Formatting</strong>: Automatic query formatting</li> <li><strong>Signature Help</strong>: Function parameter hints</li> </ul> <h4 id="starting-the-language-server" class="position-relative d-flex align-items-center group"> <span>Starting the Language Server</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="starting-the-language-server" aria-haspopup="dialog" aria-label="Share link: Starting the Language Server"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Standard stdio mode (recommended)</span> </span></span><span class="line"><span class="cl">geode lsp --stdio </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># TCP socket mode (for remote editing)</span> </span></span><span class="line"><span class="cl">geode lsp --listen 127.0.0.1:5007 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># With debug logging</span> </span></span><span class="line"><span class="cl">geode lsp --stdio --log-level debug --log-file /tmp/geode-lsp.log </span></span></code></pre></div> <h4 id="lsp-capabilities" class="position-relative d-flex align-items-center group"> <span>LSP Capabilities</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="lsp-capabilities" aria-haspopup="dialog" aria-label="Share link: LSP Capabilities"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;capabilities&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;textDocumentSync&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;openClose&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;change&#34;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;save&#34;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&#34;includeText&#34;</span><span class="p">:</span> <span class="kc">true</span> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;completionProvider&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;triggerCharacters&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;.&#34;</span><span class="p">,</span> <span class="s2">&#34;:&#34;</span><span class="p">,</span> <span class="s2">&#34;(&#34;</span><span class="p">,</span> <span class="s2">&#34;[&#34;</span><span class="p">,</span> <span class="s2">&#34; &#34;</span><span class="p">],</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;resolveProvider&#34;</span><span class="p">:</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;hoverProvider&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;definitionProvider&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;referencesProvider&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;documentFormattingProvider&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;renameProvider&#34;</span><span class="p">:</span> <span class="p">{</span> <span class="nt">&#34;prepareProvider&#34;</span><span class="p">:</span> <span class="kc">true</span> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;signatureHelpProvider&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;triggerCharacters&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;(&#34;</span><span class="p">,</span> <span class="s2">&#34;,&#34;</span><span class="p">]</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;diagnosticProvider&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;interFileDependencies&#34;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;workspaceDiagnostics&#34;</span><span class="p">:</span> <span class="kc">false</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h4 id="connecting-to-database" class="position-relative d-flex align-items-center group"> <span>Connecting to Database</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="connecting-to-database" aria-haspopup="dialog" aria-label="Share link: Connecting to Database"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>The LSP server connects to a Geode database for schema introspection and validation:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="c1">// LSP initialization options </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;connection&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;host&#34;</span><span class="p">:</span> <span class="s2">&#34;localhost&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;port&#34;</span><span class="p">:</span> <span class="mi">3141</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;database&#34;</span><span class="p">:</span> <span class="s2">&#34;default&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;tls&#34;</span><span class="p">:</span> <span class="kc">false</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;diagnostics&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;enabled&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;validateLabels&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;validateProperties&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;validateRelationships&#34;</span><span class="p">:</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h3 id="common-features" class="position-relative d-flex align-items-center group"> <span>Common Features</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="common-features" aria-haspopup="dialog" aria-label="Share link: Common Features"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="syntax-highlighting" class="position-relative d-flex align-items-center group"> <span>Syntax Highlighting</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="syntax-highlighting" aria-haspopup="dialog" aria-label="Share link: Syntax Highlighting"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>All integrations provide GQL syntax highlighting:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Keywords</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="py">keyword</span><span class="w"> </span><span class="py">color</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">friend</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">active</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">created_at</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">datetime</span><span class="p">(</span><span class="err">&#39;</span><span class="py">2024</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">01</span><span class="err">&#39;</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">friend_name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">mutual_friends</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">GROUP</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">mutual_friends</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">10</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Different</span><span class="w"> </span><span class="py">elements</span><span class="w"> </span><span class="py">highlighted</span><span class="w"> </span><span class="py">distinctly</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Keywords</span><span class="p">:</span><span class="w"> </span><span class="nc">MATCH</span><span class="p">,</span><span class="w"> </span><span class="py">WHERE</span><span class="p">,</span><span class="w"> </span><span class="py">RETURN</span><span class="p">,</span><span class="w"> </span><span class="py">etc</span><span class="err">.</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Labels</span><span class="p">:</span><span class="w"> </span><span class="p">:</span><span class="nc">User</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Relationships</span><span class="p">:</span><span class="w"> </span><span class="p">:</span><span class="nc">FOLLOWS</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Properties</span><span class="p">:</span><span class="w"> </span><span class="err">.</span><span class="nc">active</span><span class="p">,</span><span class="w"> </span><span class="err">.</span><span class="py">created_at</span><span class="p">,</span><span class="w"> </span><span class="err">.</span><span class="py">name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Functions</span><span class="p">:</span><span class="w"> </span><span class="nc">datetime</span><span class="p">(),</span><span class="w"> </span><span class="py">COUNT</span><span class="p">()</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Strings</span><span class="p">:</span><span class="w"> </span><span class="err">&#39;</span><span class="nc">2024</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">01</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Numbers</span><span class="p">:</span><span class="w"> </span><span class="nc">10</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Comments</span><span class="p">:</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="nc">this</span><span class="w"> </span><span class="py">line</span><span class="w"> </span></span></span></code></pre></div> <h4 id="auto-completion" class="position-relative d-flex align-items-center group"> <span>Auto-Completion</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="auto-completion" aria-haspopup="dialog" aria-label="Share link: Auto-Completion"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Context-aware suggestions:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">After</span><span class="w"> </span><span class="py">typing</span><span class="w"> </span><span class="s">&#34;MATCH (u:&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Completions</span><span class="p">:</span><span class="w"> </span><span class="nc">All</span><span class="w"> </span><span class="py">labels</span><span class="w"> </span><span class="py">from</span><span class="w"> </span><span class="kd">schema</span><span class="w"> </span><span class="p">(</span><span class="py">User</span><span class="p">,</span><span class="w"> </span><span class="py">Product</span><span class="p">,</span><span class="w"> </span><span class="py">Order</span><span class="p">,</span><span class="w"> </span><span class="py">etc</span><span class="err">.</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">After</span><span class="w"> </span><span class="py">typing</span><span class="w"> </span><span class="s">&#34;WHERE u.&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Completions</span><span class="p">:</span><span class="w"> </span><span class="nc">Properties</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="p">(</span><span class="py">id</span><span class="p">,</span><span class="w"> </span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">email</span><span class="p">,</span><span class="w"> </span><span class="py">active</span><span class="p">,</span><span class="w"> </span><span class="py">etc</span><span class="err">.</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">After</span><span class="w"> </span><span class="py">typing</span><span class="w"> </span><span class="s">&#34;-[:&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Completions</span><span class="p">:</span><span class="w"> </span><span class="nc">Relationship</span><span class="w"> </span><span class="kd">type</span><span class="nc">s</span><span class="w"> </span><span class="p">(</span><span class="py">FOLLOWS</span><span class="p">,</span><span class="w"> </span><span class="py">PURCHASED</span><span class="p">,</span><span class="w"> </span><span class="py">REVIEWED</span><span class="p">,</span><span class="w"> </span><span class="py">etc</span><span class="err">.</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">After</span><span class="w"> </span><span class="py">typing</span><span class="w"> </span><span class="s">&#34;RETURN UPPER(&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Completions</span><span class="p">:</span><span class="w"> </span><span class="nc">Function</span><span class="w"> </span><span class="py">signature</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">parameter</span><span class="w"> </span><span class="py">info</span><span class="w"> </span></span></span></code></pre></div> <h4 id="real-time-diagnostics" class="position-relative d-flex align-items-center group"> <span>Real-Time Diagnostics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="real-time-diagnostics" aria-haspopup="dialog" aria-label="Share link: Real-Time Diagnostics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Errors and warnings as you type:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Syntax</span><span class="w"> </span><span class="py">Error</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHER</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">test</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">&#39;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Error</span><span class="p">:</span><span class="w"> </span><span class="nc">Unknown</span><span class="w"> </span><span class="py">keyword</span><span class="w"> </span><span class="err">&#39;</span><span class="py">WHER</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Unknown</span><span class="w"> </span><span class="py">Label</span><span class="w"> </span><span class="py">Warning</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">UnknownLabel</span><span class="p">)</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Warning</span><span class="p">:</span><span class="w"> </span><span class="nc">Label</span><span class="w"> </span><span class="py">not</span><span class="w"> </span><span class="py">found</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="kd">schema</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Property</span><span class="w"> </span><span class="py">Warning</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">nonexistent</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">value</span><span class="err">&#39;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Warning</span><span class="p">:</span><span class="w"> </span><span class="nc">Property</span><span class="w"> </span><span class="py">not</span><span class="w"> </span><span class="py">in</span><span class="w"> </span><span class="kd">schema</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Type</span><span class="w"> </span><span class="py">Error</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="err">&#39;</span><span class="py">string</span><span class="err">&#39;</span><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Error</span><span class="p">:</span><span class="w"> </span><span class="nc">Cannot</span><span class="w"> </span><span class="py">add</span><span class="w"> </span><span class="py">Integer</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">String</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="query-execution" class="position-relative d-flex align-items-center group"> <span>Query Execution</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="query-execution" aria-haspopup="dialog" aria-label="Share link: Query Execution"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Execute queries without leaving the editor:</p> <table> <thead> <tr> <th>Editor</th> <th>Execute</th> <th>Explain</th> <th>Profile</th> </tr> </thead> <tbody> <tr> <td>VS Code</td> <td>Ctrl+Enter</td> <td>Ctrl+E</td> <td>Ctrl+Shift+E</td> </tr> <tr> <td>Neovim</td> <td><code>&lt;leader&gt;ge</code></td> <td><code>&lt;leader&gt;gx</code></td> <td><code>&lt;leader&gt;gp</code></td> </tr> <tr> <td>Vim</td> <td><code>&lt;leader&gt;ge</code></td> <td><code>&lt;leader&gt;gx</code></td> <td><code>&lt;leader&gt;gp</code></td> </tr> <tr> <td>IntelliJ</td> <td>Ctrl+Enter</td> <td>Ctrl+E</td> <td>Ctrl+Shift+E</td> </tr> <tr> <td>Emacs</td> <td>C-c C-c</td> <td>C-c C-e</td> <td>C-c C-p</td> </tr> </tbody> </table> <h4 id="code-formatting" class="position-relative d-flex align-items-center group"> <span>Code Formatting</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="code-formatting" aria-haspopup="dialog" aria-label="Share link: Code Formatting"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Format queries for consistency:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Before</span><span class="w"> </span><span class="py">formatting</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">match</span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">)</span><span class="w"> </span><span class="py">where</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">active</span><span class="p">=</span><span class="py">true</span><span class="w"> </span><span class="py">return</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="py">count</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">as</span><span class="w"> </span><span class="py">cnt</span><span class="w"> </span><span class="py">group</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="py">order</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">cnt</span><span class="w"> </span><span class="py">desc</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">After</span><span class="w"> </span><span class="py">formatting</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">active</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">COUNT</span><span class="p">(</span><span class="err">*</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">cnt</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">GROUP</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">cnt</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="snippets" class="position-relative d-flex align-items-center group"> <span>Snippets</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="snippets" aria-haspopup="dialog" aria-label="Share link: Snippets"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Common patterns available as snippets:</p> <table> <thead> <tr> <th>Snippet</th> <th>Expansion</th> </tr> </thead> <tbody> <tr> <td><code>match</code></td> <td>Basic MATCH query</td> </tr> <tr> <td><code>create</code></td> <td>CREATE node</td> </tr> <tr> <td><code>crel</code></td> <td>CREATE relationship</td> </tr> <tr> <td><code>merge</code></td> <td>MERGE pattern</td> </tr> <tr> <td><code>path</code></td> <td>Variable-length path</td> </tr> <tr> <td><code>agg</code></td> <td>Aggregation query</td> </tr> <tr> <td><code>case</code></td> <td>CASE expression</td> </tr> <tr> <td><code>tx</code></td> <td>Transaction block</td> </tr> </tbody> </table> <h3 id="choosing-an-editor" class="position-relative d-flex align-items-center group"> <span>Choosing an Editor</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="choosing-an-editor" aria-haspopup="dialog" aria-label="Share link: Choosing an Editor"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="decision-guide" class="position-relative d-flex align-items-center group"> <span>Decision Guide</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="decision-guide" aria-haspopup="dialog" aria-label="Share link: Decision Guide"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Choose VS Code if</strong>:</p> <ul> <li>You want graph visualization for results</li> <li>You prefer a GUI-based debugging experience</li> <li>You need extensive extension ecosystem</li> <li>You&rsquo;re new to GQL development</li> </ul> <p><strong>Choose Neovim if</strong>:</p> <ul> <li>You prefer modal editing</li> <li>You want maximum customization via Lua</li> <li>You value terminal-based workflows</li> <li>You need fast startup times</li> </ul> <p><strong>Choose Vim if</strong>:</p> <ul> <li>You need broad compatibility (SSH, minimal systems)</li> <li>You prefer traditional Vimscript configuration</li> <li>You have existing Vim workflows</li> </ul> <p><strong>Choose JetBrains IDEs if</strong>:</p> <ul> <li>You&rsquo;re already using IntelliJ/DataGrip</li> <li>You want integrated database tooling</li> <li>Your team uses JetBrains products</li> </ul> <p><strong>Choose Emacs if</strong>:</p> <ul> <li>You&rsquo;re an Emacs user</li> <li>You want consistent LSP integration</li> <li>You prefer Lisp-based configuration</li> </ul> <h4 id="feature-comparison" class="position-relative d-flex align-items-center group"> <span>Feature Comparison</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="feature-comparison" aria-haspopup="dialog" aria-label="Share link: Feature Comparison"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><table> <thead> <tr> <th>Feature</th> <th>VS Code</th> <th>Neovim</th> <th>Vim</th> <th>JetBrains</th> <th>Emacs</th> </tr> </thead> <tbody> <tr> <td>LSP Support</td> <td>Native</td> <td>Native</td> <td>Plugin</td> <td>Native</td> <td>Plugin</td> </tr> <tr> <td>Tree-sitter</td> <td>Yes</td> <td>Yes</td> <td>No</td> <td>N/A</td> <td>Limited</td> </tr> <tr> <td>Graph Viz</td> <td>Yes</td> <td>No</td> <td>No</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>Debugging</td> <td>Yes</td> <td>Limited</td> <td>No</td> <td>Yes</td> <td>No</td> </tr> <tr> <td>Remote Dev</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> <td>Yes</td> </tr> <tr> <td>Startup Time</td> <td>Slow</td> <td>Fast</td> <td>Fast</td> <td>Slow</td> <td>Medium</td> </tr> <tr> <td>Memory</td> <td>High</td> <td>Low</td> <td>Low</td> <td>High</td> <td>Medium</td> </tr> </tbody> </table> <h3 id="configuration-best-practices" class="position-relative d-flex align-items-center group"> <span>Configuration Best Practices</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="configuration-best-practices" aria-haspopup="dialog" aria-label="Share link: Configuration Best Practices"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="project-level-configuration" class="position-relative d-flex align-items-center group"> <span>Project-Level Configuration</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="project-level-configuration" aria-haspopup="dialog" aria-label="Share link: Project-Level Configuration"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Create editor configuration files in your project:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">project/ </span></span><span class="line"><span class="cl">├── .vscode/ </span></span><span class="line"><span class="cl">│ └── settings.json # VS Code settings </span></span><span class="line"><span class="cl">├── .nvim.lua # Neovim project config </span></span><span class="line"><span class="cl">├── .geode.json # Geode connection config </span></span><span class="line"><span class="cl">└── queries/ </span></span><span class="line"><span class="cl"> └── *.gql # Query files </span></span></code></pre></div><p><strong>Geode Connection Config</strong> (<code>.geode.json</code>):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;connections&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;development&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;host&#34;</span><span class="p">:</span> <span class="s2">&#34;localhost&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;port&#34;</span><span class="p">:</span> <span class="mi">3141</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;database&#34;</span><span class="p">:</span> <span class="s2">&#34;dev&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;staging&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;host&#34;</span><span class="p">:</span> <span class="s2">&#34;staging.example.com&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;port&#34;</span><span class="p">:</span> <span class="mi">3141</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;database&#34;</span><span class="p">:</span> <span class="s2">&#34;staging&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;tls&#34;</span><span class="p">:</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;defaultConnection&#34;</span><span class="p">:</span> <span class="s2">&#34;development&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;formatting&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;keywordCase&#34;</span><span class="p">:</span> <span class="s2">&#34;UPPER&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;indentSize&#34;</span><span class="p">:</span> <span class="mi">2</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h4 id="team-configuration" class="position-relative d-flex align-items-center group"> <span>Team Configuration</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="team-configuration" aria-haspopup="dialog" aria-label="Share link: Team Configuration"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Share consistent settings across the team:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="c1">// .vscode/settings.json (committed to repo) </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.formatting.formatOnSave&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.formatting.keywordCase&#34;</span><span class="p">:</span> <span class="s2">&#34;UPPER&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;geode.diagnostics.enabled&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;[gql]&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;editor.tabSize&#34;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;editor.formatOnSave&#34;</span><span class="p">:</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h4 id="environment-specific-settings" class="position-relative d-flex align-items-center group"> <span>Environment-Specific Settings</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="environment-specific-settings" aria-haspopup="dialog" aria-label="Share link: Environment-Specific Settings"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Use environment variables for sensitive configuration:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Development</span> </span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">GEODE_HOST</span><span class="o">=</span>localhost </span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">GEODE_PORT</span><span class="o">=</span><span class="m">3141</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Production (read-only)</span> </span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">GEODE_HOST</span><span class="o">=</span>prod.example.com </span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">GEODE_READ_ONLY</span><span class="o">=</span><span class="nb">true</span> </span></span></code></pre></div> <h3 id="troubleshooting" class="position-relative d-flex align-items-center group"> <span>Troubleshooting</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="troubleshooting" aria-haspopup="dialog" aria-label="Share link: Troubleshooting"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="common-issues" class="position-relative d-flex align-items-center group"> <span>Common Issues</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="common-issues" aria-haspopup="dialog" aria-label="Share link: Common Issues"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>LSP Not Starting</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Verify Geode installation</span> </span></span><span class="line"><span class="cl">which geode </span></span><span class="line"><span class="cl">geode --version </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Test LSP manually</span> </span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">&#39;{&#34;jsonrpc&#34;:&#34;2.0&#34;,&#34;id&#34;:1,&#34;method&#34;:&#34;initialize&#34;,&#34;params&#34;:{}}&#39;</span> <span class="p">|</span> geode lsp --stdio </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check permissions</span> </span></span><span class="line"><span class="cl">ls -la <span class="k">$(</span>which geode<span class="k">)</span> </span></span></code></pre></div><p><strong>No Auto-Completion</strong>:</p> <ul> <li>Ensure LSP is connected to database</li> <li>Check schema cache is populated</li> <li>Verify file type is detected as <code>gql</code></li> </ul> <p><strong>Slow Performance</strong>:</p> <ul> <li>Reduce diagnostic debounce time</li> <li>Limit number of problems reported</li> <li>Check database connection latency</li> </ul> <p><strong>Connection Failures</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Test connectivity</span> </span></span><span class="line"><span class="cl">nc -zv localhost <span class="m">3141</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Test TLS</span> </span></span><span class="line"><span class="cl">openssl s_client -connect localhost:3141 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check server status</span> </span></span><span class="line"><span class="cl">geode shell -h localhost -p <span class="m">3141</span> </span></span></code></pre></div> <h4 id="debug-logging" class="position-relative d-flex align-items-center group"> <span>Debug Logging</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="debug-logging" aria-haspopup="dialog" aria-label="Share link: Debug Logging"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Enable verbose logging:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># LSP debug mode</span> </span></span><span class="line"><span class="cl">geode lsp --stdio --log-level debug --log-file /tmp/geode-lsp.log </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># View logs</span> </span></span><span class="line"><span class="cl">tail -f /tmp/geode-lsp.log </span></span></code></pre></div> <h4 id="getting-help" class="position-relative d-flex align-items-center group"> <span>Getting Help</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="getting-help" aria-haspopup="dialog" aria-label="Share link: Getting Help"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li>Check editor-specific documentation</li> <li>Review LSP logs for errors</li> <li>Test with minimal configuration</li> <li>Report issues on GitHub</li> </ul> <h3 id="related-topics" class="position-relative d-flex align-items-center group"> <span>Related Topics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="related-topics" aria-haspopup="dialog" aria-label="Share link: Related Topics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><a href="/tags/vscode/" >VS Code Extension</a> - Detailed VS Code guide</li> <li><a href="/tags/neovim/" >Neovim Plugin</a> - Neovim configuration</li> <li><a href="/tags/vim/" >Vim Plugin</a> - Classic Vim setup</li> <li><a href="/tags/ide/" >IDE Integration</a> - IDE-specific features</li> <li><a href="/tags/plugin/" >Plugin Development</a> - Creating custom plugins</li> <li><a href="/docs/development/lsp-guide/" >LSP Guide</a> - LSP implementation details</li> </ul> <h3 id="further-reading" class="position-relative d-flex align-items-center group"> <span>Further Reading</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="further-reading" aria-haspopup="dialog" aria-label="Share link: Further Reading"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li>Language Server Protocol Specification</li> <li>Editor-Specific Documentation</li> <li>GQL Language Reference</li> <li>Query Development Best Practices</li> <li>Team Collaboration Workflows</li> <li>Performance Optimization Guide</li> </ul>

Related Articles