Files
clice/dev/test-and-debug.html
2026-01-03 08:23:38 +00:00

38 lines
27 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Test and Debug | clice</title>
<meta name="description" content="a powerful and modern C++ language server">
<meta name="generator" content="VitePress v1.6.4">
<link rel="preload stylesheet" href="/assets/style.C0Yaiv_5.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.DQoL_1fX.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.CLpq7zWO.js">
<link rel="modulepreload" href="/assets/chunks/framework.l7bN90nj.js">
<link rel="modulepreload" href="/assets/dev_test-and-debug.md.Cd8ZNQsd.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-24511351><!--[--><!--]--><!--[--><span tabindex="-1" data-v-83a3f712></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-83a3f712>Skip to content</a><!--]--><!----><header class="VPNav" data-v-24511351 data-v-8d64a174><div class="VPNavBar" data-v-8d64a174 data-v-fa22aa31><div class="wrapper" data-v-fa22aa31><div class="container" data-v-fa22aa31><div class="title" data-v-fa22aa31><div class="VPNavBarTitle has-sidebar" data-v-fa22aa31 data-v-4392cbaa><a class="title" href="/" data-v-4392cbaa><!--[--><!--]--><!----><span data-v-4392cbaa>clice</span><!--[--><!--]--></a></div></div><div class="content" data-v-fa22aa31><div class="content-body" data-v-fa22aa31><!--[--><!--]--><div class="VPNavBarSearch search" data-v-fa22aa31><!----></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-fa22aa31 data-v-4fbe08f7><span id="main-nav-aria-label" class="visually-hidden" data-v-4fbe08f7> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-4fbe08f7 data-v-27efe891><!--[--><span data-v-27efe891>Home</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-fa22aa31 data-v-3eed34a3 data-v-134c4b98><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-134c4b98><span class="text" data-v-134c4b98><span class="vpi-languages option-icon" data-v-134c4b98></span><!----><span class="vpi-chevron-down text-icon" data-v-134c4b98></span></span></button><div class="menu" data-v-134c4b98><div class="VPMenu" data-v-134c4b98 data-v-3b514283><!----><!--[--><!--[--><div class="items" data-v-3eed34a3><p class="title" data-v-3eed34a3>English</p><!--[--><div class="VPMenuLink" data-v-3eed34a3 data-v-cd255f6d><a class="VPLink link" href="/zh/dev/test-and-debug" data-v-cd255f6d><!--[--><span data-v-cd255f6d>简体中文</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-fa22aa31 data-v-687fd4c1><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-687fd4c1 data-v-c8168445 data-v-35846bb7><span class="check" data-v-35846bb7><span class="icon" data-v-35846bb7><!--[--><span class="vpi-sun sun" data-v-c8168445></span><span class="vpi-moon moon" data-v-c8168445></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-fa22aa31 data-v-84f3cb2c data-v-0a01d640><!--[--><a class="VPSocialLink no-icon" href="https://discord.gg/PA3UxW2VA3" aria-label="discord" target="_blank" rel="noopener" data-v-0a01d640 data-v-36865dac><span class="vpi-social-discord"></span></a><a class="VPSocialLink no-icon" href="https://github.com/clice-io/clice" aria-label="github" target="_blank" rel="noopener" data-v-0a01d640 data-v-36865dac><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-fa22aa31 data-v-20cb852c data-v-134c4b98><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-134c4b98><span class="vpi-more-horizontal icon" data-v-134c4b98></span></button><div class="menu" data-v-134c4b98><div class="VPMenu" data-v-134c4b98 data-v-3b514283><!----><!--[--><!--[--><div class="group translations" data-v-20cb852c><p class="trans-title" data-v-20cb852c>English</p><!--[--><div class="VPMenuLink" data-v-20cb852c data-v-cd255f6d><a class="VPLink link" href="/zh/dev/test-and-debug" data-v-cd255f6d><!--[--><span data-v-cd255f6d>简体中文</span><!--]--></a></div><!--]--></div><div class="group" data-v-20cb852c><div class="item appearance" data-v-20cb852c><p class="label" data-v-20cb852c>Appearance</p><div class="appearance-action" data-v-20cb852c><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-20cb852c data-v-c8168445 data-v-35846bb7><span class="check" data-v-35846bb7><span class="icon" data-v-35846bb7><!--[--><span class="vpi-sun sun" data-v-c8168445></span><span class="vpi-moon moon" data-v-c8168445></span><!--]--></span></span></button></div></div></div><div class="group" data-v-20cb852c><div class="item social-links" data-v-20cb852c><div class="VPSocialLinks social-links-list" data-v-20cb852c data-v-0a01d640><!--[--><a class="VPSocialLink no-icon" href="https://discord.gg/PA3UxW2VA3" aria-label="discord" target="_blank" rel="noopener" data-v-0a01d640 data-v-36865dac><span class="vpi-social-discord"></span></a><a class="VPSocialLink no-icon" href="https://github.com/clice-io/clice" aria-label="github" target="_blank" rel="noopener" data-v-0a01d640 data-v-36865dac><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-fa22aa31 data-v-017f7456><span class="container" data-v-017f7456><span class="top" data-v-017f7456></span><span class="middle" data-v-017f7456></span><span class="bottom" data-v-017f7456></span></span></button></div></div></div></div><div class="divider" data-v-fa22aa31><div class="divider-line" data-v-fa22aa31></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-24511351 data-v-d5903e19><div class="container" data-v-d5903e19><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-d5903e19><span class="vpi-align-left menu-icon" data-v-d5903e19></span><span class="menu-text" data-v-d5903e19>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-d5903e19 data-v-4b731308><button data-v-4b731308>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-24511351 data-v-1489031f><div class="curtain" data-v-1489031f></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-1489031f><span class="visually-hidden" id="sidebar-aria-label" data-v-1489031f> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-06590693><section class="VPSidebarItem level-0 collapsible" data-v-06590693 data-v-7098a323><div class="item" role="button" tabindex="0" data-v-7098a323><div class="indicator" data-v-7098a323></div><h2 class="text" data-v-7098a323>Design</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-7098a323><span class="vpi-chevron-right caret-icon" data-v-7098a323></span></div></div><div class="items" data-v-7098a323><!--[--><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/design/architecture" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Architecture</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/design/compilation" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Compilation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/design/header-context" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Header Context</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/design/template-resolver" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Template Resolver</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-06590693><section class="VPSidebarItem level-0 collapsible has-active" data-v-06590693 data-v-7098a323><div class="item" role="button" tabindex="0" data-v-7098a323><div class="indicator" data-v-7098a323></div><h2 class="text" data-v-7098a323>Development</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-7098a323><span class="vpi-chevron-right caret-icon" data-v-7098a323></span></div></div><div class="items" data-v-7098a323><!--[--><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/dev/build" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Build from Source</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/dev/contribution" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Contribution</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/dev/extension" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Extension</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/dev/test-and-debug" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Test and Debug</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-06590693><section class="VPSidebarItem level-0 collapsible" data-v-06590693 data-v-7098a323><div class="item" role="button" tabindex="0" data-v-7098a323><div class="indicator" data-v-7098a323></div><h2 class="text" data-v-7098a323>Guide</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-7098a323><span class="vpi-chevron-right caret-icon" data-v-7098a323></span></div></div><div class="items" data-v-7098a323><!--[--><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/guide/configuration" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Configuration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/guide/quick-start" data-v-7098a323><!--[--><p class="text" data-v-7098a323>Quick Start</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-7098a323 data-v-7098a323><div class="item" data-v-7098a323><div class="indicator" data-v-7098a323></div><a class="VPLink link link" href="/guide/what-is-clice" data-v-7098a323><!--[--><p class="text" data-v-7098a323>What is clice?</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-24511351 data-v-5cfd54a6><div class="VPDoc has-sidebar has-aside" data-v-5cfd54a6 data-v-bbef34fe><!--[--><!--]--><div class="container" data-v-bbef34fe><div class="aside" data-v-bbef34fe><div class="aside-curtain" data-v-bbef34fe></div><div class="aside-container" data-v-bbef34fe><div class="aside-content" data-v-bbef34fe><div class="VPDocAside" data-v-bbef34fe data-v-606ad2c6><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-606ad2c6 data-v-52cb4cd4><div class="content" data-v-52cb4cd4><div class="outline-marker" data-v-52cb4cd4></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-52cb4cd4>On this page</div><ul class="VPDocOutlineItem root" data-v-52cb4cd4 data-v-6c15f963><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-606ad2c6></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-bbef34fe><div class="content-container" data-v-bbef34fe><!--[--><!--]--><main class="main" data-v-bbef34fe><div style="position:relative;" class="vp-doc _dev_test-and-debug" data-v-bbef34fe><div><h1 id="test-and-debug" tabindex="-1">Test and Debug <a class="header-anchor" href="#test-and-debug" aria-label="Permalink to &quot;Test and Debug&quot;"></a></h1><h2 id="run-tests" tabindex="-1">Run Tests <a class="header-anchor" href="#run-tests" aria-label="Permalink to &quot;Run Tests&quot;"></a></h2><p>clice has two types of tests: unit tests and integration tests.</p><ul><li>Run unit tests</li></ul><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./build/bin/unit_tests</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --test-dir=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;./tests/data&quot;</span></span></code></pre></div><ul><li>Run integration tests</li></ul><p>We use pytest to run integration tests. Please refer to <code>pyproject.toml</code> to install the required Python libraries.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --log-cli-level=INFO</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tests/integration</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --executable=./build/bin/clice</span></span></code></pre></div><p>If you use xmake as your build system, you can run the tests directly with xmake:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> unit_tests</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> xmake</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> integration_tests/default</span></span></code></pre></div><h2 id="debug" tabindex="-1">Debug <a class="header-anchor" href="#debug" aria-label="Permalink to &quot;Debug&quot;"></a></h2><p>If you want to attach a debugger to clice for debugging, it is recommended to first start clice in socket mode independently, and then connect the client to it.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./build/bin/clice</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --mode=socket</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --port=50051</span></span></code></pre></div><p>After the server starts, you can connect a client to the server in the following two ways:</p><ul><li>Connect by running a specific test with pytest</li></ul><p>You can run a single integration test case to connect to a running clice instance. This is very useful for reproducing and debugging specific scenarios.</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pytest</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --log-cli-level=INFO</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tests/integration/test_file_operation.py::test_did_open</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --mode=socket</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --port=50051</span></span></code></pre></div><ul><li>Use VS Code for practical testing</li></ul><p>You can also connect to a running clice service by configuring the clice-vscode extension, allowing you to debug in a real-world usage scenario.</p><ol><li><p>Download the <a href="https://marketplace.visualstudio.com/items?itemName=ykiko.clice-vscode" target="_blank" rel="noreferrer">clice-vscode</a> extension from the Marketplace.</p></li><li><p>Configure <code>settings.json</code>: Create a <code>.vscode/settings.json</code> file in your project&#39;s root directory and add the following content:</p><div class="language-jsonc vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">jsonc</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Point this to the clice binary you downloaded.</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;clice.executable&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;/path/to/your/clice/executable&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Enable socket mode.</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;clice.mode&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;socket&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;clice.port&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">50051</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // Optional: Set this to an empty string to turn off the clangd.</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> &quot;clangd.path&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li><li><p>Reload Window: After modifying the configuration, execute the <code>Developer: Reload Window</code> command in VS Code for the settings to take effect. The extension will automatically connect to the clice instance listening on port 50051.</p></li></ol><p>If you need to modify or debug the clice-vscode extension itself, follow these steps:</p><ol><li><p>Clone and install dependencies:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/clice-io/clice-vscode</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clice-vscode</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span></code></pre></div></li><li><p>Open the extension project with VS Code: Open the <code>clice-vscode</code> folder in a new VS Code window.</p></li><li><p>Create debug configuration: In the <code>clice-vscode</code> project, also create a <code>.vscode/settings.json</code> file with the same content as above.</p></li><li><p>Press <code>F5</code>. This will launch an [Extension Development Host] window. This is a new VS Code window with your local clice-vscode extension code loaded. Open your C++ project in this new window, and it should automatically connect to clice.</p></li></ol></div></div></main><footer class="VPDocFooter" data-v-bbef34fe data-v-3de8f80a><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-3de8f80a><span class="visually-hidden" id="doc-footer-aria-label" data-v-3de8f80a>Pager</span><div class="pager" data-v-3de8f80a><a class="VPLink link pager-link prev" href="/dev/extension" data-v-3de8f80a><!--[--><span class="desc" data-v-3de8f80a>Previous page</span><span class="title" data-v-3de8f80a>Extension</span><!--]--></a></div><div class="pager" data-v-3de8f80a><a class="VPLink link pager-link next" href="/guide/configuration" data-v-3de8f80a><!--[--><span class="desc" data-v-3de8f80a>Next page</span><span class="title" data-v-3de8f80a>Configuration</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"design_architecture.md\":\"B-ctAdqa\",\"design_compilation.md\":\"CgLBgVWN\",\"design_header-context.md\":\"CLeWGHwo\",\"design_index.md\":\"Buyl5Jmv\",\"design_template-resolver.md\":\"BNn_jKB5\",\"dev_build.md\":\"BMRSQYou\",\"dev_contribution.md\":\"DhEkIBdN\",\"dev_extension.md\":\"XVgKd8kt\",\"dev_test-and-debug.md\":\"Cd8ZNQsd\",\"guide_configuration.md\":\"D4nmP_A7\",\"guide_quick-start.md\":\"CTAi4GI0\",\"guide_what-is-clice.md\":\"D2ebPDnR\",\"index.md\":\"BIyS1X5z\",\"zh_design_architecture.md\":\"Dtjvys6J\",\"zh_design_compilation.md\":\"spz_aNkl\",\"zh_design_header-context.md\":\"ySoc9rIE\",\"zh_design_index.md\":\"C7K-QRDi\",\"zh_design_template-resolver.md\":\"DDSv4CNK\",\"zh_dev_build.md\":\"25ZHlRiJ\",\"zh_dev_contribution.md\":\"DxaaX3ax\",\"zh_dev_extension.md\":\"CNVomHxL\",\"zh_dev_test-and-debug.md\":\"Cv4TROgb\",\"zh_guide_configuration.md\":\"z9oxX9Dn\",\"zh_guide_quick-start.md\":\"B-Yy5Njn\",\"zh_guide_what-is-clice.md\":\"CEXKoZ_c\",\"zh_index.md\":\"Ddga0o0y\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"clice\",\"description\":\"a powerful and modern C++ language server\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Home\",\"link\":\"/\"}],\"sidebar\":{\"/zh/\":[{\"text\":\"Design\",\"collapsed\":false,\"items\":[{\"text\":\"Architecture\",\"link\":\"/zh/design/architecture\"},{\"text\":\"Compilation\",\"link\":\"/zh/design/compilation\"},{\"text\":\"Header Context\",\"link\":\"/zh/design/header-context\"},{\"text\":\"Template Resolver\",\"link\":\"/zh/design/template-resolver\"}]},{\"text\":\"Development\",\"collapsed\":false,\"items\":[{\"text\":\"Build from Source\",\"link\":\"/zh/dev/build\"},{\"text\":\"Contribution\",\"link\":\"/zh/dev/contribution\"},{\"text\":\"Extension\",\"link\":\"/zh/dev/extension\"},{\"text\":\"Test and Debug\",\"link\":\"/zh/dev/test-and-debug\"}]},{\"text\":\"Guide\",\"collapsed\":false,\"items\":[{\"text\":\"Configuration\",\"link\":\"/zh/guide/configuration\"},{\"text\":\"Quick Start\",\"link\":\"/zh/guide/quick-start\"},{\"text\":\"What is clice?\",\"link\":\"/zh/guide/what-is-clice\"}]}],\"/\":[{\"text\":\"Design\",\"collapsed\":false,\"items\":[{\"text\":\"Architecture\",\"link\":\"/design/architecture\"},{\"text\":\"Compilation\",\"link\":\"/design/compilation\"},{\"text\":\"Header Context\",\"link\":\"/design/header-context\"},{\"text\":\"Template Resolver\",\"link\":\"/design/template-resolver\"}]},{\"text\":\"Development\",\"collapsed\":false,\"items\":[{\"text\":\"Build from Source\",\"link\":\"/dev/build\"},{\"text\":\"Contribution\",\"link\":\"/dev/contribution\"},{\"text\":\"Extension\",\"link\":\"/dev/extension\"},{\"text\":\"Test and Debug\",\"link\":\"/dev/test-and-debug\"}]},{\"text\":\"Guide\",\"collapsed\":false,\"items\":[{\"text\":\"Configuration\",\"link\":\"/guide/configuration\"},{\"text\":\"Quick Start\",\"link\":\"/guide/quick-start\"},{\"text\":\"What is clice?\",\"link\":\"/guide/what-is-clice\"}]}]},\"socialLinks\":[{\"icon\":\"discord\",\"link\":\"https://discord.gg/PA3UxW2VA3\"},{\"icon\":\"github\",\"link\":\"https://github.com/clice-io/clice\"}],\"outline\":\"deep\"},\"locales\":{\"root\":{\"label\":\"English\"},\"zh\":{\"label\":\"简体中文\"}},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
</body>
</html>