From 101136e9a03a4c47fb7f6f4e6dfaed6ef3048de1 Mon Sep 17 00:00:00 2001 From: ykiko Date: Sun, 28 Dec 2025 16:31:40 +0800 Subject: [PATCH 1/7] optimize folder level --- CMakeLists.txt | 4 ++-- {bin => src}/clice.cc | 0 {bin => tests/unit}/unit_tests.cc | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename {bin => src}/clice.cc (100%) rename {bin => tests/unit}/unit_tests.cc (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index bfdc47490..be05958ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -177,7 +177,7 @@ target_link_libraries(clice-core PUBLIC llvm-libs ) -add_executable(clice "${PROJECT_SOURCE_DIR}/bin/clice.cc") +add_executable(clice "${PROJECT_SOURCE_DIR}/src/clice.cc") target_link_libraries(clice PRIVATE clice-core) install(TARGETS clice RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) @@ -196,7 +196,7 @@ if(CLICE_ENABLE_TEST) "${PROJECT_SOURCE_DIR}/tests/unit/*/*.cpp") add_executable(unit_tests "${CLICE_TEST_SOURCES}" - "${PROJECT_SOURCE_DIR}/bin/unit_tests.cc" + "${PROJECT_SOURCE_DIR}/tests/unit/unit_tests.cc" ) target_include_directories(unit_tests PUBLIC "${PROJECT_SOURCE_DIR}") target_link_libraries(unit_tests PRIVATE clice-core cpptrace::cpptrace) diff --git a/bin/clice.cc b/src/clice.cc similarity index 100% rename from bin/clice.cc rename to src/clice.cc diff --git a/bin/unit_tests.cc b/tests/unit/unit_tests.cc similarity index 100% rename from bin/unit_tests.cc rename to tests/unit/unit_tests.cc From 7f3850b19e0c892587951c9110538c74c5fb192e Mon Sep 17 00:00:00 2001 From: ykiko Date: Sun, 28 Dec 2025 18:45:13 +0800 Subject: [PATCH 2/7] format the world --- .clang-format | 1 - .github/ISSUE_TEMPLATE/bug_report.md | 24 +- .github/ISSUE_TEMPLATE/feature_request.md | 7 +- .github/workflows/check-format.yml | 32 +- .prettierrc.yaml | 23 + README.md | 8 +- config/llvm-manifest.json | 162 ++--- docs/.vitepress/config.ts | 70 +- docs/.vitepress/theme/index.ts | 28 +- docs/.vitepress/theme/sidebar.ts | 44 +- docs/.vitepress/theme/style.css | 106 ++- docs/clice.toml | 72 +- docs/en/dev/contribution.md | 1 + docs/en/dev/test-and-debug.md | 16 +- docs/en/guide/configuration.md | 2 +- docs/en/index.md | 4 +- docs/zh/design/compilation.md | 1 - docs/zh/design/template-resolver.md | 1 - docs/zh/dev/build.md | 1 - docs/zh/dev/contribution.md | 1 + docs/zh/dev/test-and-debug.md | 34 +- docs/zh/guide/configuration.md | 2 +- docs/zh/guide/quick-start.md | 1 - docs/zh/index.md | 4 +- editors/vscode/.eslintrc.json | 48 +- editors/vscode/.vscode/extensions.json | 6 +- editors/vscode/.vscode/launch.json | 26 +- editors/vscode/.vscode/settings.json | 20 +- editors/vscode/.vscode/tasks.json | 69 +- editors/vscode/src/download.ts | 183 +++-- editors/vscode/src/extension.ts | 148 ++-- editors/vscode/src/feature/header.ts | 40 +- editors/vscode/src/feature/highlight.ts | 43 +- editors/vscode/src/setting.ts | 31 +- editors/vscode/src/test/extension.test.ts | 16 +- editors/vscode/tsconfig.json | 26 +- editors/vscode/webpack.config.js | 74 +- editors/zed/Cargo.toml | 4 +- pixi.lock | 842 ++++++++++++++++++---- pixi.toml | 92 ++- tests/data/clang_tidy/clice.toml | 7 +- tests/pyproject.toml | 14 +- tombi.toml | 6 + xmake.lua | 4 +- 44 files changed, 1463 insertions(+), 881 deletions(-) create mode 100644 .prettierrc.yaml create mode 100644 tombi.toml diff --git a/.clang-format b/.clang-format index e8e61469f..61dec384a 100644 --- a/.clang-format +++ b/.clang-format @@ -1,5 +1,4 @@ # clang-format configuration -# compatible with clang-format 18 UseTab: Never ColumnLimit: 100 diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index dd84ea782..9b77ea713 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,10 +1,9 @@ --- name: Bug report about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - +title: "" +labels: "" +assignees: "" --- **Describe the bug** @@ -12,6 +11,7 @@ A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: + 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' @@ -24,15 +24,17 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] + +- OS: [e.g. iOS] +- Browser [e.g. chrome, safari] +- Version [e.g. 22] **Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] + +- Device: [e.g. iPhone6] +- OS: [e.g. iOS8.1] +- Browser [e.g. stock browser, safari] +- Version [e.g. 22] **Additional context** Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index bbcbbe7d6..2bc5d5f71 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,10 +1,9 @@ --- name: Feature request about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' - +title: "" +labels: "" +assignees: "" --- **Is your feature request related to a problem? Please describe.** diff --git a/.github/workflows/check-format.yml b/.github/workflows/check-format.yml index f1da5ef97..c8ef73cd2 100644 --- a/.github/workflows/check-format.yml +++ b/.github/workflows/check-format.yml @@ -1,4 +1,4 @@ -name: format +name: check-format on: push: @@ -7,6 +7,10 @@ on: pull_request: branches: [main] +permissions: + contents: read + pull-requests: write + jobs: check: runs-on: ubuntu-latest @@ -26,27 +30,17 @@ jobs: - name: Run check id: precommit - run: | - pixi run ci-check + run: pixi run format continue-on-error: true - - name: Show diff on failure - if: steps.precommit.outcome == 'failure' - run: | - echo "❌ pre-commit found issues that it auto-fixed." - echo " Please run 'pre-commit run --all-files' locally," - echo " commit the changes, and push again." - echo "" - echo "👇 The required changes are shown below:" - git diff - - - name: Fail the job if pre-commit failed - if: steps.precommit.outcome == 'failure' - run: | - echo "pre-commit checks failed." - exit 1 - - name: Auto correct uses: huacnlee/autocorrect-action@main with: args: --lint ./docs + continue-on-error: true + + - name: Suggest changes + uses: reviewdog/action-suggester@v1 + with: + tool_name: "fmt" + fail_on_error: true diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 000000000..ac1ea39bf --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,23 @@ +# .prettierrc.yaml + +printWidth: 100 +tabWidth: 4 +useTabs: false +semi: true +singleQuote: false +jsxSingleQuote: false +quoteProps: "as-needed" +trailingComma: "all" +bracketSpacing: true +arrowParens: "always" +endOfLine: "lf" + +overrides: + - files: "*.md" + options: + proseWrap: "preserve" + tabWidth: 2 + + - files: ["*.json", "*.yaml", "*.yml", ".clang-format", ".clang-tidy"] + options: + tabWidth: 2 diff --git a/README.md b/README.md index 062e13cd1..97cf31451 100644 --- a/README.md +++ b/README.md @@ -22,11 +22,11 @@ Download the latest `clice` binary from the [releases page](https://github.com/c ```jsonc { - // Optional: Set this to an empty string to turn off the clangd. - "clangd.path": "", + // Optional: Set this to an empty string to turn off the clangd. + "clangd.path": "", - // Point this to the clice binary you downloaded. - "clice.executable": "/path/to/your/clice/executable", + // Point this to the clice binary you downloaded. + "clice.executable": "/path/to/your/clice/executable", } ``` diff --git a/config/llvm-manifest.json b/config/llvm-manifest.json index 1e3dca4ea..c403fd5c1 100644 --- a/config/llvm-manifest.json +++ b/config/llvm-manifest.json @@ -1,83 +1,83 @@ [ - { - "version": "21.1.4+r1", - "filename": "arm64-macos-clang-debug-asan.tar.xz", - "sha256": "7da4b7d63edefecaf11773e7e701c575140d1a07329bbbb038673b6ee4516ff5", - "lto": false, - "asan": true, - "platform": "macosx", - "build_type": "Debug" - }, - { - "version": "21.1.4+r1", - "filename": "arm64-macos-clang-releasedbg-lto.tar.xz", - "sha256": "300455b169448f9f01ae95e3bc269f489558a4ca3955e3032171cc75feca0e30", - "lto": true, - "asan": false, - "platform": "macosx", - "build_type": "RelWithDebInfo" - }, - { - "version": "21.1.4+r1", - "filename": "arm64-macos-clang-releasedbg.tar.xz", - "sha256": "9abfc6cd65b957d734ffb97610a634fb4a66d3fbe0fcfb5a1c9124ef693c1495", - "lto": false, - "asan": false, - "platform": "macosx", - "build_type": "RelWithDebInfo" - }, - { - "version": "21.1.4+r1", - "filename": "x64-linux-gnu-debug-asan.tar.xz", - "sha256": "c1ad3ec476911596a842ac67dd9c9c9475ce9f0a77b81101d3c801840292e7bc", - "lto": false, - "asan": true, - "platform": "linux", - "build_type": "Debug" - }, - { - "version": "21.1.4+r1", - "filename": "x64-linux-gnu-releasedbg-lto.tar.xz", - "sha256": "8a869c2184d139dbba704e2d712e7a68336458ad2d70622b3eb906c3e3511e54", - "lto": true, - "asan": false, - "platform": "linux", - "build_type": "RelWithDebInfo" - }, - { - "version": "21.1.4+r1", - "filename": "x64-linux-gnu-releasedbg.tar.xz", - "sha256": "552bab86f715d4f2c027f07eaaf5b3d6b8e430af0b74b470142f3f00da4feec6", - "lto": false, - "asan": false, - "platform": "linux", - "build_type": "RelWithDebInfo" - }, - { - "version": "21.1.4+r1", - "filename": "x64-windows-msvc-debug-asan.tar.xz", - "sha256": "093667a493d336c22ff3c604c5f1fea2a7d2c927c1179cec44e9a03726906ac1", - "lto": false, - "asan": true, - "platform": "windows", - "build_type": "Debug" - }, - { - "version": "21.1.4+r1", - "filename": "x64-windows-msvc-releasedbg-lto.tar.xz", - "sha256": "010539e85621dc3c6ecf359d899feb4075aeca5d0bba6625cdbec0e570e79129", - "lto": true, - "asan": false, - "platform": "windows", - "build_type": "RelWithDebInfo" - }, - { - "version": "21.1.4+r1", - "filename": "x64-windows-msvc-releasedbg.tar.xz", - "sha256": "f473c09fbea10053fac00be409d75dc228d4a38bcbc5e4aeb58b56a4b0dde78e", - "lto": false, - "asan": false, - "platform": "windows", - "build_type": "RelWithDebInfo" - } + { + "version": "21.1.4+r1", + "filename": "arm64-macos-clang-debug-asan.tar.xz", + "sha256": "7da4b7d63edefecaf11773e7e701c575140d1a07329bbbb038673b6ee4516ff5", + "lto": false, + "asan": true, + "platform": "macosx", + "build_type": "Debug" + }, + { + "version": "21.1.4+r1", + "filename": "arm64-macos-clang-releasedbg-lto.tar.xz", + "sha256": "300455b169448f9f01ae95e3bc269f489558a4ca3955e3032171cc75feca0e30", + "lto": true, + "asan": false, + "platform": "macosx", + "build_type": "RelWithDebInfo" + }, + { + "version": "21.1.4+r1", + "filename": "arm64-macos-clang-releasedbg.tar.xz", + "sha256": "9abfc6cd65b957d734ffb97610a634fb4a66d3fbe0fcfb5a1c9124ef693c1495", + "lto": false, + "asan": false, + "platform": "macosx", + "build_type": "RelWithDebInfo" + }, + { + "version": "21.1.4+r1", + "filename": "x64-linux-gnu-debug-asan.tar.xz", + "sha256": "c1ad3ec476911596a842ac67dd9c9c9475ce9f0a77b81101d3c801840292e7bc", + "lto": false, + "asan": true, + "platform": "linux", + "build_type": "Debug" + }, + { + "version": "21.1.4+r1", + "filename": "x64-linux-gnu-releasedbg-lto.tar.xz", + "sha256": "8a869c2184d139dbba704e2d712e7a68336458ad2d70622b3eb906c3e3511e54", + "lto": true, + "asan": false, + "platform": "linux", + "build_type": "RelWithDebInfo" + }, + { + "version": "21.1.4+r1", + "filename": "x64-linux-gnu-releasedbg.tar.xz", + "sha256": "552bab86f715d4f2c027f07eaaf5b3d6b8e430af0b74b470142f3f00da4feec6", + "lto": false, + "asan": false, + "platform": "linux", + "build_type": "RelWithDebInfo" + }, + { + "version": "21.1.4+r1", + "filename": "x64-windows-msvc-debug-asan.tar.xz", + "sha256": "093667a493d336c22ff3c604c5f1fea2a7d2c927c1179cec44e9a03726906ac1", + "lto": false, + "asan": true, + "platform": "windows", + "build_type": "Debug" + }, + { + "version": "21.1.4+r1", + "filename": "x64-windows-msvc-releasedbg-lto.tar.xz", + "sha256": "010539e85621dc3c6ecf359d899feb4075aeca5d0bba6625cdbec0e570e79129", + "lto": true, + "asan": false, + "platform": "windows", + "build_type": "RelWithDebInfo" + }, + { + "version": "21.1.4+r1", + "filename": "x64-windows-msvc-releasedbg.tar.xz", + "sha256": "f473c09fbea10053fac00be409d75dc228d4a38bcbc5e4aeb58b56a4b0dde78e", + "lto": false, + "asan": false, + "platform": "windows", + "build_type": "RelWithDebInfo" + } ] diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 92a44a307..ef936f9ab 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -1,40 +1,38 @@ -import { defineConfig } from 'vitepress' -import { genSidebar } from './theme/sidebar' +import { defineConfig } from "vitepress"; +import { genSidebar } from "./theme/sidebar"; // https://vitepress.dev/reference/site-config export default defineConfig({ - title: "clice", - description: "a powerful and modern C++ language server", - cleanUrls: true, - base: '/', - rewrites: { - 'en/:rest*': ':rest*', - }, - locales: { - root: { label: 'English' }, - zh: { label: '简体中文' }, - }, - themeConfig: { - // https://vitepress.dev/reference/default-theme-config - nav: [ - { text: 'Home', link: '/' }, - ], - sidebar: { - "/zh/": [ - genSidebar('zh', 'design', { title: 'Design' }), - genSidebar('zh', 'dev', { title: 'Development' }), - genSidebar('zh', 'guide', { title: 'Guide' }), - ], - "/": [ - genSidebar('en', 'design', { title: 'Design' }), - genSidebar('en', 'dev', { title: 'Development' }), - genSidebar('en', 'guide', { title: 'Guide' }), - ], + title: "clice", + description: "a powerful and modern C++ language server", + cleanUrls: true, + base: "/", + rewrites: { + "en/:rest*": ":rest*", }, - 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: "简体中文" }, + }, + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + nav: [{ text: "Home", link: "/" }], + sidebar: { + "/zh/": [ + genSidebar("zh", "design", { title: "Design" }), + genSidebar("zh", "dev", { title: "Development" }), + genSidebar("zh", "guide", { title: "Guide" }), + ], + "/": [ + genSidebar("en", "design", { title: "Design" }), + genSidebar("en", "dev", { title: "Development" }), + genSidebar("en", "guide", { title: "Guide" }), + ], + }, + socialLinks: [ + { icon: "discord", link: "https://discord.gg/PA3UxW2VA3" }, + { icon: "github", link: "https://github.com/clice-io/clice" }, + ], + outline: "deep", + }, +}); diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts index def4cfc87..cf42c91f7 100644 --- a/docs/.vitepress/theme/index.ts +++ b/docs/.vitepress/theme/index.ts @@ -1,17 +1,17 @@ // https://vitepress.dev/guide/custom-theme -import { h } from 'vue' -import type { Theme } from 'vitepress' -import DefaultTheme from 'vitepress/theme' -import './style.css' +import { h } from "vue"; +import type { Theme } from "vitepress"; +import DefaultTheme from "vitepress/theme"; +import "./style.css"; export default { - extends: DefaultTheme, - Layout: () => { - return h(DefaultTheme.Layout, null, { - // https://vitepress.dev/guide/extending-default-theme#layout-slots - }) - }, - enhanceApp({ app, router, siteData }) { - // ... - } -} satisfies Theme + extends: DefaultTheme, + Layout: () => { + return h(DefaultTheme.Layout, null, { + // https://vitepress.dev/guide/extending-default-theme#layout-slots + }); + }, + enhanceApp({ app, router, siteData }) { + // ... + }, +} satisfies Theme; diff --git a/docs/.vitepress/theme/sidebar.ts b/docs/.vitepress/theme/sidebar.ts index 8cc6c7c4a..985987ac0 100644 --- a/docs/.vitepress/theme/sidebar.ts +++ b/docs/.vitepress/theme/sidebar.ts @@ -1,45 +1,45 @@ -import fs from 'fs' -import path from 'path' -import { DefaultTheme } from 'vitepress' +import fs from "fs"; +import path from "path"; +import { DefaultTheme } from "vitepress"; export const genSidebar = ( lang: string, dirPath: string, options: { - title: string - collapsible?: boolean - ignore?: string[] - } + title: string; + collapsible?: boolean; + ignore?: string[]; + }, ): DefaultTheme.SidebarItem => { - const sidebarPath = path.resolve(process.cwd(), lang, dirPath) - const ignore = options.ignore || ['index.md'] + const sidebarPath = path.resolve(process.cwd(), lang, dirPath); + const ignore = options.ignore || ["index.md"]; const files = fs .readdirSync(sidebarPath) - .filter((file) => file.endsWith('.md') && !ignore.includes(file)) + .filter((file) => file.endsWith(".md") && !ignore.includes(file)); const items = files.map((file) => { - const content = fs.readFileSync(path.resolve(sidebarPath, file), 'utf-8') - const match = content.match(/^#\s+(.*)/) - const title = match ? match[1] : file.replace('.md', '') + const content = fs.readFileSync(path.resolve(sidebarPath, file), "utf-8"); + const match = content.match(/^#\s+(.*)/); + const title = match ? match[1] : file.replace(".md", ""); - let prefix = '/'; - if (lang != 'en') { + let prefix = "/"; + if (lang != "en") { prefix += lang; - prefix += '/'; + prefix += "/"; } return { text: title, /// Make sure link for en is actually root, beacuse Github Pages /// doesn't support redirect url. - link: `${prefix}${dirPath}/${file.replace('.md', '')}` - } - }) + link: `${prefix}${dirPath}/${file.replace(".md", "")}`, + }; + }); return { text: options.title, collapsed: options.collapsible || false, - items - } -} + items, + }; +}; diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css index 8702981dd..a4d59d8b0 100644 --- a/docs/.vitepress/theme/style.css +++ b/docs/.vitepress/theme/style.css @@ -44,30 +44,30 @@ * -------------------------------------------------------------------------- */ :root { - --vp-c-default-1: var(--vp-c-gray-1); - --vp-c-default-2: var(--vp-c-gray-2); - --vp-c-default-3: var(--vp-c-gray-3); - --vp-c-default-soft: var(--vp-c-gray-soft); - - --vp-c-brand-1: var(--vp-c-indigo-1); - --vp-c-brand-2: var(--vp-c-indigo-2); - --vp-c-brand-3: var(--vp-c-indigo-3); - --vp-c-brand-soft: var(--vp-c-indigo-soft); - - --vp-c-tip-1: var(--vp-c-brand-1); - --vp-c-tip-2: var(--vp-c-brand-2); - --vp-c-tip-3: var(--vp-c-brand-3); - --vp-c-tip-soft: var(--vp-c-brand-soft); - - --vp-c-warning-1: var(--vp-c-yellow-1); - --vp-c-warning-2: var(--vp-c-yellow-2); - --vp-c-warning-3: var(--vp-c-yellow-3); - --vp-c-warning-soft: var(--vp-c-yellow-soft); - - --vp-c-danger-1: var(--vp-c-red-1); - --vp-c-danger-2: var(--vp-c-red-2); - --vp-c-danger-3: var(--vp-c-red-3); - --vp-c-danger-soft: var(--vp-c-red-soft); + --vp-c-default-1: var(--vp-c-gray-1); + --vp-c-default-2: var(--vp-c-gray-2); + --vp-c-default-3: var(--vp-c-gray-3); + --vp-c-default-soft: var(--vp-c-gray-soft); + + --vp-c-brand-1: var(--vp-c-indigo-1); + --vp-c-brand-2: var(--vp-c-indigo-2); + --vp-c-brand-3: var(--vp-c-indigo-3); + --vp-c-brand-soft: var(--vp-c-indigo-soft); + + --vp-c-tip-1: var(--vp-c-brand-1); + --vp-c-tip-2: var(--vp-c-brand-2); + --vp-c-tip-3: var(--vp-c-brand-3); + --vp-c-tip-soft: var(--vp-c-brand-soft); + + --vp-c-warning-1: var(--vp-c-yellow-1); + --vp-c-warning-2: var(--vp-c-yellow-2); + --vp-c-warning-3: var(--vp-c-yellow-3); + --vp-c-warning-soft: var(--vp-c-yellow-soft); + + --vp-c-danger-1: var(--vp-c-red-1); + --vp-c-danger-2: var(--vp-c-red-2); + --vp-c-danger-3: var(--vp-c-red-3); + --vp-c-danger-soft: var(--vp-c-red-soft); } /** @@ -75,15 +75,15 @@ * -------------------------------------------------------------------------- */ :root { - --vp-button-brand-border: transparent; - --vp-button-brand-text: var(--vp-c-white); - --vp-button-brand-bg: var(--vp-c-brand-3); - --vp-button-brand-hover-border: transparent; - --vp-button-brand-hover-text: var(--vp-c-white); - --vp-button-brand-hover-bg: var(--vp-c-brand-2); - --vp-button-brand-active-border: transparent; - --vp-button-brand-active-text: var(--vp-c-white); - --vp-button-brand-active-bg: var(--vp-c-brand-1); + --vp-button-brand-border: transparent; + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand-3); + --vp-button-brand-hover-border: transparent; + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-2); + --vp-button-brand-active-border: transparent; + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-c-brand-1); } /** @@ -91,31 +91,23 @@ * -------------------------------------------------------------------------- */ :root { - --vp-home-hero-name-color: transparent; - --vp-home-hero-name-background: -webkit-linear-gradient( - 120deg, - #bd34fe 30%, - #41d1ff - ); - - --vp-home-hero-image-background-image: linear-gradient( - -45deg, - #bd34fe 50%, - #47caff 50% - ); - --vp-home-hero-image-filter: blur(44px); + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient(120deg, #bd34fe 30%, #41d1ff); + + --vp-home-hero-image-background-image: linear-gradient(-45deg, #bd34fe 50%, #47caff 50%); + --vp-home-hero-image-filter: blur(44px); } @media (min-width: 640px) { - :root { - --vp-home-hero-image-filter: blur(56px); - } + :root { + --vp-home-hero-image-filter: blur(56px); + } } @media (min-width: 960px) { - :root { - --vp-home-hero-image-filter: blur(68px); - } + :root { + --vp-home-hero-image-filter: blur(68px); + } } /** @@ -123,10 +115,10 @@ * -------------------------------------------------------------------------- */ :root { - --vp-custom-block-tip-border: transparent; - --vp-custom-block-tip-text: var(--vp-c-text-1); - --vp-custom-block-tip-bg: var(--vp-c-brand-soft); - --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft); + --vp-custom-block-tip-border: transparent; + --vp-custom-block-tip-text: var(--vp-c-text-1); + --vp-custom-block-tip-bg: var(--vp-c-brand-soft); + --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft); } /** @@ -134,5 +126,5 @@ * -------------------------------------------------------------------------- */ .DocSearch { - --docsearch-primary-color: var(--vp-c-brand-1) !important; + --docsearch-primary-color: var(--vp-c-brand-1) !important; } diff --git a/docs/clice.toml b/docs/clice.toml index dd020c264..ec28b9232 100644 --- a/docs/clice.toml +++ b/docs/clice.toml @@ -1,4 +1,4 @@ -### clice configuration +## # clice configuration # This section outlines the supported built-in variables for clice. # These variables can be referenced in strings using the syntax `${var}`. @@ -9,47 +9,39 @@ # - `${workspace}`: The workspace directory provided by the client. [project] - # Enable experimental clang-tidy diagnostics. - # This feature is tracked in https://github.com/clice-project/clice/issues/90. - clang_tidy = false - - # Maximum number of active files to keep in memory. If the number of active files - # exceeds this limit, the least recently used files will be removed. - # The default value is 8. Whatever the number you set, the minimum is 1, the maximum is 512. - max_active_file = 8 - - # Directory for storing PCH and PCM files. - cache_dir = "${workspace}/.clice/cache" - - # Directory for storing index files. - index_dir = "${workspace}/.clice/index" - - logging_dir = "${workspace}/.clice/logging" - - # Compile commands directories to search for compile_commands.json files. - compile_commands_dirs = ["${workspace}/build"] - +# Enable experimental clang-tidy diagnostics. +# This feature is tracked in https://github.com/clice-project/clice/issues/90. +clang_tidy = false +# Maximum number of active files to keep in memory. If the number of active files +# exceeds this limit, the least recently used files will be removed. +# The default value is 8. Whatever the number you set, the minimum is 1, the maximum is 512. +max_active_file = 8 +# Directory for storing PCH and PCM files. +cache_dir = "${workspace}/.clice/cache" +# Directory for storing index files. +index_dir = "${workspace}/.clice/index" +logging_dir = "${workspace}/.clice/logging" +# Compile commands directories to search for compile_commands.json files. +compile_commands_dirs = ["${workspace}/build"] # Control the behavior for specific files. Note that Clice matches rules # in order. If you want to add your own rules, either delete this rule # or insert your rule before it. [[rules]] - # Files matching the specified pattern will have this rule applied. - # - # Patterns can use the following syntax: - # - `*`: Matches one or more characters in a path segment. - # - `?`: Matches a single character in a path segment. - # - `**`: Matches any number of path segments, including none. - # - `{}`: Groups conditions (e.g., `**/*.{ts,js}` matches all TypeScript - # and JavaScript files). - # - `[]`: Declares a range of characters to match in a path segment - # (e.g., `example.[0-9]` matches `example.0`, `example.1`, etc.). - # - `[!...]`: Negates a range of characters to match in a path segment - # (e.g., `example.[!0-9]` matches `example.a`, `example.b`, but not `example.0`). - patterns = ["**/*"] - - # Commands to append to the original command list (e.g., ["-std=c++17"]). - append = [] - - # Commands to remove from the original command list. - remove = [] +# Files matching the specified pattern will have this rule applied. +# +# Patterns can use the following syntax: +# - `*`: Matches one or more characters in a path segment. +# - `?`: Matches a single character in a path segment. +# - `**`: Matches any number of path segments, including none. +# - `{}`: Groups conditions (e.g., `**/*.{ts,js}` matches all TypeScript +# and JavaScript files). +# - `[]`: Declares a range of characters to match in a path segment +# (e.g., `example.[0-9]` matches `example.0`, `example.1`, etc.). +# - `[!...]`: Negates a range of characters to match in a path segment +# (e.g., `example.[!0-9]` matches `example.a`, `example.b`, but not `example.0`). +patterns = ["**/*"] +# Commands to append to the original command list (e.g., ["-std=c++17"]). +append = [] +# Commands to remove from the original command list. +remove = [] diff --git a/docs/en/dev/contribution.md b/docs/en/dev/contribution.md index 380f36d4c..1784bf5fa 100644 --- a/docs/en/dev/contribution.md +++ b/docs/en/dev/contribution.md @@ -7,5 +7,6 @@ Please refer to [build](./build.md) to build clice, refer to [test and debug](./ ## Code Style Naming: + - Variable names: lowercase with underscores - Class names, enum names: PascalCase diff --git a/docs/en/dev/test-and-debug.md b/docs/en/dev/test-and-debug.md index 01bfdd317..f84676162 100644 --- a/docs/en/dev/test-and-debug.md +++ b/docs/en/dev/test-and-debug.md @@ -53,24 +53,24 @@ You can also connect to a running clice service by configuring the clice-vscode ```jsonc { - // Point this to the clice binary you downloaded. - "clice.executable": "/path/to/your/clice/executable", + // Point this to the clice binary you downloaded. + "clice.executable": "/path/to/your/clice/executable", - // Enable socket mode. - "clice.mode": "socket", - "clice.port": 50051, + // Enable socket mode. + "clice.mode": "socket", + "clice.port": 50051, - // Optional: Set this to an empty string to turn off the clangd. - "clangd.path": "", + // Optional: Set this to an empty string to turn off the clangd. + "clangd.path": "", } ``` 3. Reload Window: After modifying the configuration, execute the `Developer: Reload Window` command in VS Code for the settings to take effect. The extension will automatically connect to the clice instance listening on port 50051. - If you need to modify or debug the clice-vscode extension itself, follow these steps: 1. Clone and install dependencies: + ```shell $ git clone https://github.com/clice-io/clice-vscode $ cd clice-vscode diff --git a/docs/en/guide/configuration.md b/docs/en/guide/configuration.md index 08213d090..7c784aa13 100644 --- a/docs/en/guide/configuration.md +++ b/docs/en/guide/configuration.md @@ -35,7 +35,7 @@ Glob patterns for matching file paths, following LSP's [standard](https://micros - `{}`: Used for grouping conditions (e.g., `**/*.{ts,js}` matches all TypeScript and JavaScript files). - `[]`: Declares a character range to match in a path segment (e.g., `example.[0-9]` matches `example.0`, `example.1`, etc.). - `[!...]`: Excludes a character range to match in a path segment (e.g., `example.[!0-9]` matches `example.a`, `example.b`, but not `example.0`). -
+
| Name | Type | Default | | ---------------- | ------------------- | ------- | diff --git a/docs/en/index.md b/docs/en/index.md index d10ac223e..15120cfc4 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -16,8 +16,8 @@ hero: text: Contribution link: /dev/contribution image: - src: /image.png - alt: clice + src: /image.png + alt: clice features: - icon: T diff --git a/docs/zh/design/compilation.md b/docs/zh/design/compilation.md index 3da791a95..c797811ed 100644 --- a/docs/zh/design/compilation.md +++ b/docs/zh/design/compilation.md @@ -16,5 +16,4 @@ int main () { `iostream` 这个头文件大概有 2w 行代码,clice 会先把 `#include ` 这一行代码构建成 PCH 文件,在完成之后在使用这个 PCH 文件来解析后面的代码。这样的话后续重新解析的代码量就只剩 5 行了,而不是原本的 2w 行,速度会变得非常快。除非你修改了 preamble 部分的代码,导致需要构建新的 preamble。 - ## Cancel Compilation diff --git a/docs/zh/design/template-resolver.md b/docs/zh/design/template-resolver.md index 989026bdf..39da35e40 100644 --- a/docs/zh/design/template-resolver.md +++ b/docs/zh/design/template-resolver.md @@ -28,5 +28,4 @@ void foo(std::vector> vec2) { 2. 它只进行名称查找而不进行模板实例化,就算找到了最后的结果,也没法把它和最初的模板参数映射起来 3. 不考虑默认模板参数,无法处理由默认模板参数导致的依赖名 - 尽管我们可以对标准库的类型开洞来提供相关的支持,但是我希望用户的代码能和标准库的代码有相同的地位,那么我们就需要一种通用的算法来处理依赖类型。为了解决这个问题,我编写了一个伪实例化器(pseudo instantiator)。它能在没有具体类型的前提下对依赖类型进行实例化,从而达到化简的目的。比如上面这个例子里面的`std::vector>::reference`就能被化简为`std::vector&`,进一步就能为用户提供代码补全选项。 diff --git a/docs/zh/dev/build.md b/docs/zh/dev/build.md index f1ff411a1..42e1bd165 100644 --- a/docs/zh/dev/build.md +++ b/docs/zh/dev/build.md @@ -54,7 +54,6 @@ xmake build --all | --enable_test | false | 是否构建 clice 的单元测试 | | --ci | false | 是否打开 `CLICE_CI_ENVIRONMENT` | - ## A Note on LLVM Libs 由于 C++ 的语法太过复杂,自己编写一个新的 parser 是不现实的。clice 调用 clang 的 API 来 parse C++ 源文件获取 AST,这意味它需要链接 llvm/clang libs。由于 clice 使用了 clang 的私有头文件,这些私有头文件在 llvm 发布的 binary release 中是没有的,所以不能直接使用系统的 llvm package。 diff --git a/docs/zh/dev/contribution.md b/docs/zh/dev/contribution.md index 1edc240fc..201b9005f 100644 --- a/docs/zh/dev/contribution.md +++ b/docs/zh/dev/contribution.md @@ -7,5 +7,6 @@ ## Code Style 命名 + - 变量名:小写下换线 - 类名,枚举名:大驼峰 diff --git a/docs/zh/dev/test-and-debug.md b/docs/zh/dev/test-and-debug.md index 0ab430692..aae43fac6 100644 --- a/docs/zh/dev/test-and-debug.md +++ b/docs/zh/dev/test-and-debug.md @@ -51,31 +51,31 @@ $ pytest -s --log-cli-level=INFO tests/integration/test_file_operation.py::test_ 2. 配置 `settings.json`: 在你的项目根目录下创建 `.vscode/settings.json` 文件,并填入以下内容: - ```jsonc - { - // Point this to the clice binary you downloaded. - "clice.executable": "/path/to/your/clice/executable", + ```jsonc + { + // Point this to the clice binary you downloaded. + "clice.executable": "/path/to/your/clice/executable", - // Enable socket mode. - "clice.mode": "socket", - "clice.port": 50051, + // Enable socket mode. + "clice.mode": "socket", + "clice.port": 50051, - // Optional: Set this to an empty string to turn off the clangd. - "clangd.path": "", - } - ``` + // Optional: Set this to an empty string to turn off the clangd. + "clangd.path": "", + } + ``` 3. 重新加载窗口:修改配置后,在 vscode 中执行 Developer: Reload Window 命令使配置生效。插件会自动连接到正在 50051 端口监听的 clice。 - 如果你需要修改或调试 clice-vscode 插件本身,可以按以下步骤操作: 1. 克隆并安装依赖: - ```shell - $ git clone https://github.com/clice-io/clice-vscode - $ cd clice-vscode - $ npm install - ``` + + ```shell + $ git clone https://github.com/clice-io/clice-vscode + $ cd clice-vscode + $ npm install + ``` 2. 使用 vscode 打开插件项目:用一个新的 vscode 窗口打开 clice-vscode 文件夹 diff --git a/docs/zh/guide/configuration.md b/docs/zh/guide/configuration.md index 02d53af76..8683a3b0b 100644 --- a/docs/zh/guide/configuration.md +++ b/docs/zh/guide/configuration.md @@ -35,7 +35,7 @@ - `{}`: 用于分组条件 (例如,`**/*.{ts,js}` 匹配所有 TypeScript 和 JavaScript 文件)。 - `[]`: 声明要匹配的路径段中的字符范围 (例如,`example.[0-9]` 匹配 `example.0`, `example.1` 等)。 - `[!...]`: 排除要匹配的路径段中的字符范围 (例如,`example.[!0-9]` 匹配 `example.a`, `example.b`,但不匹配 `example.0`)。 -
+
| 名称 | 类型 | 默认值 | | ---------------- | ------------------- | ------ | diff --git a/docs/zh/guide/quick-start.md b/docs/zh/guide/quick-start.md index 121526002..04485d8a9 100644 --- a/docs/zh/guide/quick-start.md +++ b/docs/zh/guide/quick-start.md @@ -26,7 +26,6 @@ clice 实现了 [Language Server Protocol](https://microsoft.github.io/language- 自己从源码编译 clice,具体的步骤参考 [build](../dev/build.md)。 - ## Project Setup 为了让 clice 能正确理解你的代码(例如找到头文件的位置),需要为 clice 提供一份 `compile_commands.json` 文件,也就说所谓的 [编译数据库](https://clang.llvm.org/docs/JSONCompilationDatabase.html)。编译数据库中提供了每个源文件的编译选项。 diff --git a/docs/zh/index.md b/docs/zh/index.md index 87ee49a1e..fbb6b03b1 100644 --- a/docs/zh/index.md +++ b/docs/zh/index.md @@ -16,8 +16,8 @@ hero: text: 参与贡献 link: /zh/dev/contribution image: - src: /image.png - alt: clice + src: /image.png + alt: clice features: - icon: T diff --git a/editors/vscode/.eslintrc.json b/editors/vscode/.eslintrc.json index c70bf00e5..bb8a00155 100644 --- a/editors/vscode/.eslintrc.json +++ b/editors/vscode/.eslintrc.json @@ -1,30 +1,24 @@ { - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" + "root": true, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + "plugins": ["@typescript-eslint"], + "rules": { + "@typescript-eslint/naming-convention": [ + "warn", + { + "selector": "import", + "format": ["camelCase", "PascalCase"] + } ], - "rules": { - "@typescript-eslint/naming-convention": [ - "warn", - { - "selector": "import", - "format": [ "camelCase", "PascalCase" ] - } - ], - "@typescript-eslint/semi": "warn", - "curly": "warn", - "eqeqeq": "warn", - "no-throw-literal": "warn", - "semi": "off" - }, - "ignorePatterns": [ - "out", - "dist", - "**/*.d.ts" - ] + "@typescript-eslint/semi": "warn", + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "semi": "off" + }, + "ignorePatterns": ["out", "dist", "**/*.d.ts"] } diff --git a/editors/vscode/.vscode/extensions.json b/editors/vscode/.vscode/extensions.json index dd01eb355..9e5e0b733 100644 --- a/editors/vscode/.vscode/extensions.json +++ b/editors/vscode/.vscode/extensions.json @@ -1,5 +1,9 @@ { // See http://go.microsoft.com/fwlink/?LinkId=827846 // for the documentation about the extensions.json format - "recommendations": ["dbaeumer.vscode-eslint", "amodio.tsl-problem-matcher", "ms-vscode.extension-test-runner"] + "recommendations": [ + "dbaeumer.vscode-eslint", + "amodio.tsl-problem-matcher", + "ms-vscode.extension-test-runner" + ] } diff --git a/editors/vscode/.vscode/launch.json b/editors/vscode/.vscode/launch.json index c42edc04b..ccdb134dc 100644 --- a/editors/vscode/.vscode/launch.json +++ b/editors/vscode/.vscode/launch.json @@ -3,19 +3,15 @@ // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { - "version": "0.2.0", - "configurations": [ - { - "name": "Run Extension", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "outFiles": [ - "${workspaceFolder}/dist/**/*.js" - ], - "preLaunchTask": "${defaultBuildTask}" - } - ] + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/dist/**/*.js"], + "preLaunchTask": "${defaultBuildTask}" + } + ] } diff --git a/editors/vscode/.vscode/settings.json b/editors/vscode/.vscode/settings.json index 16a5c0229..64ee92966 100644 --- a/editors/vscode/.vscode/settings.json +++ b/editors/vscode/.vscode/settings.json @@ -1,13 +1,13 @@ // Place your settings in this file to overwrite default and user settings. { - "files.exclude": { - "out": false, // set this to true to hide the "out" folder with the compiled JS files - "dist": false // set this to true to hide the "dist" folder with the compiled JS files - }, - "search.exclude": { - "out": true, // set this to false to include "out" folder in search results - "dist": true // set this to false to include "dist" folder in search results - }, - // Turn off tsc task auto detection since we have the necessary tasks as npm scripts - "typescript.tsc.autoDetect": "off" + "files.exclude": { + "out": false, // set this to true to hide the "out" folder with the compiled JS files + "dist": false // set this to true to hide the "dist" folder with the compiled JS files + }, + "search.exclude": { + "out": true, // set this to false to include "out" folder in search results + "dist": true // set this to false to include "dist" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off" } diff --git a/editors/vscode/.vscode/tasks.json b/editors/vscode/.vscode/tasks.json index c2ab68aed..9e3300b04 100644 --- a/editors/vscode/.vscode/tasks.json +++ b/editors/vscode/.vscode/tasks.json @@ -1,40 +1,37 @@ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format { - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "watch", - "problemMatcher": "$ts-webpack-watch", - "isBackground": true, - "presentation": { - "reveal": "never", - "group": "watchers" - }, - "group": { - "kind": "build", - "isDefault": true - } - }, - { - "type": "npm", - "script": "watch-tests", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "never", - "group": "watchers" - }, - "group": "build" - }, - { - "label": "tasks: watch-tests", - "dependsOn": [ - "npm: watch", - "npm: watch-tests" - ], - "problemMatcher": [] - } - ] + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$ts-webpack-watch", + "isBackground": true, + "presentation": { + "reveal": "never", + "group": "watchers" + }, + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "type": "npm", + "script": "watch-tests", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never", + "group": "watchers" + }, + "group": "build" + }, + { + "label": "tasks: watch-tests", + "dependsOn": ["npm: watch", "npm: watch-tests"], + "problemMatcher": [] + } + ] } diff --git a/editors/vscode/src/download.ts b/editors/vscode/src/download.ts index 4160eee0b..0997e1e62 100644 --- a/editors/vscode/src/download.ts +++ b/editors/vscode/src/download.ts @@ -1,10 +1,10 @@ -import * as vscode from 'vscode'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as https from 'https'; -import * as os from 'os'; +import * as vscode from "vscode"; +import * as fs from "fs"; +import * as path from "path"; +import * as https from "https"; +import * as os from "os"; // @ts-ignore -import decompress = require('decompress'); +import decompress = require("decompress"); interface GitHubRelease { tag_name: string; @@ -14,12 +14,10 @@ interface GitHubRelease { }[]; } - export async function ensureServerBinary( context: vscode.ExtensionContext, - channel: vscode.OutputChannel + channel: vscode.OutputChannel, ): Promise { - const storagePath = context.globalStorageUri.fsPath; const platform = os.platform(); const arch = os.arch(); @@ -27,20 +25,20 @@ export async function ensureServerBinary( channel.appendLine(`[Download] Initializing clice downloader...`); channel.appendLine(`[Download] Platform: ${platform}, Arch: ${arch}, Storage: ${storagePath}`); - let platformKeyword = ''; - let archKeyword = ''; - let binaryName = 'clice'; + let platformKeyword = ""; + let archKeyword = ""; + let binaryName = "clice"; - if (platform === 'win32') { - platformKeyword = 'windows'; - archKeyword = 'x64'; - binaryName = 'clice.exe'; - } else if (platform === 'darwin') { - platformKeyword = 'macos'; + if (platform === "win32") { + platformKeyword = "windows"; + archKeyword = "x64"; + binaryName = "clice.exe"; + } else if (platform === "darwin") { + platformKeyword = "macos"; archKeyword = arch; - } else if (platform === 'linux') { - platformKeyword = 'linux'; - archKeyword = arch === 'x64' ? 'x86_64' : arch; + } else if (platform === "linux") { + platformKeyword = "linux"; + archKeyword = arch === "x64" ? "x86_64" : arch; } else { const msg = `Unsupported platform: ${platform}`; channel.appendLine(`[Download] Error: ${msg}`); @@ -71,15 +69,19 @@ export async function ensureServerBinary( const release = await fetchReleaseInfo(channel); channel.appendLine(`[Download] Latest tag: ${release.tag_name}`); - const asset = release.assets.find(a => { + const asset = release.assets.find((a) => { const name = a.name.toLowerCase(); - return name.includes(platformKeyword) && + return ( + name.includes(platformKeyword) && name.includes(archKeyword) && - !name.includes('symbol'); + !name.includes("symbol") + ); }); if (!asset) { - throw new Error(`No compatible asset found for ${platform}-${archKeyword} in release ${release.tag_name}`); + throw new Error( + `No compatible asset found for ${platform}-${archKeyword} in release ${release.tag_name}`, + ); } channel.appendLine(`[Download] Found asset: ${asset.name}`); @@ -103,15 +105,16 @@ export async function ensureServerBinary( throw new Error(`Executable not found at ${executablePath} after extraction.`); } - if (platform !== 'win32') { + if (platform !== "win32") { channel.appendLine(`[Download] Setting executable permissions (chmod 755)...`); - fs.chmodSync(executablePath, '755'); + fs.chmodSync(executablePath, "755"); } channel.appendLine(`[Download] Setup successful. Binary ready at: ${executablePath}`); - vscode.window.showInformationMessage(`Clice language server updated to ${release.tag_name}`); + vscode.window.showInformationMessage( + `Clice language server updated to ${release.tag_name}`, + ); return executablePath; - } catch (error) { channel.appendLine(`[Download] CRITICAL ERROR during setup:`); if (error instanceof Error) { @@ -123,11 +126,16 @@ export async function ensureServerBinary( channel.appendLine(`[Download] Unknown error: ${JSON.stringify(error)}`); } - vscode.window.showErrorMessage(`Failed to download clice server. Check "clice" output channel for details.`, "Open Output").then(selection => { - if (selection === "Open Output") { - channel.show(); - } - }); + vscode.window + .showErrorMessage( + `Failed to download clice server. Check "clice" output channel for details.`, + "Open Output", + ) + .then((selection) => { + if (selection === "Open Output") { + channel.show(); + } + }); return undefined; } finally { @@ -135,60 +143,73 @@ export async function ensureServerBinary( } } -function downloadFile(url: string, destPath: string, channel: vscode.OutputChannel, maxRedirects = 5): Promise { +function downloadFile( + url: string, + destPath: string, + channel: vscode.OutputChannel, + maxRedirects = 5, +): Promise { return new Promise((resolve, reject) => { if (maxRedirects <= 0) { - reject(new Error('Too many redirects')); + reject(new Error("Too many redirects")); return; } const file = fs.createWriteStream(destPath); channel.appendLine(`[Download] Start downloading to ${destPath}`); - https.get(url, { headers: { 'User-Agent': 'VSCode-Extension' } }, (response) => { - if (response.statusCode === 302 || response.statusCode === 301) { - channel.appendLine(`[Download] Redirecting to ${response.headers.location}`); - file.close(); - downloadFile(response.headers.location!, destPath, channel, maxRedirects - 1).then(resolve).catch(reject); - return; - } - if (response.statusCode !== 200) { - reject(new Error(`Download failed with status code ${response.statusCode}`)); - return; - } + https + .get(url, { headers: { "User-Agent": "VSCode-Extension" } }, (response) => { + if (response.statusCode === 302 || response.statusCode === 301) { + channel.appendLine(`[Download] Redirecting to ${response.headers.location}`); + file.close(); + downloadFile(response.headers.location!, destPath, channel, maxRedirects - 1) + .then(resolve) + .catch(reject); + return; + } + if (response.statusCode !== 200) { + reject(new Error(`Download failed with status code ${response.statusCode}`)); + return; + } - response.pipe(file); - file.on('finish', () => { + response.pipe(file); + file.on("finish", () => { + file.close(); + channel.appendLine(`[Download] Download finished.`); + resolve(); + }); + }) + .on("error", (err) => { file.close(); - channel.appendLine(`[Download] Download finished.`); - resolve(); + fs.unlink(destPath, () => {}); + reject(err); }); - }).on('error', (err) => { - file.close(); - fs.unlink(destPath, () => { }); - reject(err); - }); }); } async function fetchReleaseInfo(channel: vscode.OutputChannel): Promise { try { - channel.appendLine('[Download] Attempting to fetch latest stable release...'); - const release = await fetchJson('/repos/clice-io/clice/releases/latest'); + channel.appendLine("[Download] Attempting to fetch latest stable release..."); + const release = await fetchJson("/repos/clice-io/clice/releases/latest"); channel.appendLine(`[Download] Found stable release: ${release.tag_name}`); return release; } catch (error: any) { - if (error.message && error.message.includes('404')) { - channel.appendLine('[Download] Latest stable release not found (404). Checking for pre-releases...'); + if (error.message && error.message.includes("404")) { + channel.appendLine( + "[Download] Latest stable release not found (404). Checking for pre-releases...", + ); - const releases = await fetchJson('/repos/clice-io/clice/releases?per_page=1'); + const releases = await fetchJson( + "/repos/clice-io/clice/releases?per_page=1", + ); if (Array.isArray(releases) && releases.length > 0) { const latestPre = releases[0]; channel.appendLine(`[Download] Found pre-release: ${latestPre.tag_name}`); return latestPre; } else { - throw new Error('No releases found in repository.'); + throw new Error("No releases found in repository."); } } throw error; @@ -198,27 +219,29 @@ async function fetchReleaseInfo(channel: vscode.OutputChannel): Promise(apiPath: string): Promise { return new Promise((resolve, reject) => { const options = { - hostname: 'api.github.com', + hostname: "api.github.com", path: apiPath, - headers: { 'User-Agent': 'VSCode-Extension' } + headers: { "User-Agent": "VSCode-Extension" }, }; - https.get(options, (res) => { - let data = ''; - if (res.statusCode && (res.statusCode < 200 || res.statusCode >= 300)) { - res.resume(); - reject(new Error(`GitHub API returned ${res.statusCode} for ${apiPath}`)); - return; - } - - res.on('data', (chunk) => data += chunk); - res.on('end', () => { - try { - resolve(JSON.parse(data)); - } catch (e) { - reject(new Error(`Failed to parse GitHub API response: ${e}`)); + https + .get(options, (res) => { + let data = ""; + if (res.statusCode && (res.statusCode < 200 || res.statusCode >= 300)) { + res.resume(); + reject(new Error(`GitHub API returned ${res.statusCode} for ${apiPath}`)); + return; } - }); - }).on('error', reject); + + res.on("data", (chunk) => (data += chunk)); + res.on("end", () => { + try { + resolve(JSON.parse(data)); + } catch (e) { + reject(new Error(`Failed to parse GitHub API response: ${e}`)); + } + }); + }) + .on("error", reject); }); } diff --git a/editors/vscode/src/extension.ts b/editors/vscode/src/extension.ts index 2d9b45563..62f421cb7 100644 --- a/editors/vscode/src/extension.ts +++ b/editors/vscode/src/extension.ts @@ -1,93 +1,95 @@ -import * as net from 'net'; -import * as vscode from 'vscode'; -import { workspace, window, ExtensionContext } from 'vscode'; -import { LanguageClient, LanguageClientOptions, ServerOptions, StreamInfo } from 'vscode-languageclient/node'; -import { getSetting } from './setting'; -import { ensureServerBinary } from './download' +import * as net from "net"; +import * as vscode from "vscode"; +import { workspace, window, ExtensionContext } from "vscode"; +import { + LanguageClient, + LanguageClientOptions, + ServerOptions, + StreamInfo, +} from "vscode-languageclient/node"; +import { getSetting } from "./setting"; +import { ensureServerBinary } from "./download"; let client: LanguageClient; export async function registerCommands(client: LanguageClient, context: ExtensionContext) { - context.subscriptions.push(vscode.commands.registerCommand("clice.restart", async () => { - await client.restart(); - })); + context.subscriptions.push( + vscode.commands.registerCommand("clice.restart", async () => { + await client.restart(); + }), + ); } export async function activate(context: ExtensionContext) { - console.log('Congratulations, your extension "clice" is now active!'); + console.log('Congratulations, your extension "clice" is now active!'); - const channel = window.createOutputChannel('clice'); - const verboseChannel = window.createOutputChannel('clice-verbose'); + const channel = window.createOutputChannel("clice"); + const verboseChannel = window.createOutputChannel("clice-verbose"); - const setting = getSetting(); - if (!setting) { - return; - } + const setting = getSetting(); + if (!setting) { + return; + } - let executable = setting.executable - let serverOptions: ServerOptions | (() => Promise); + let executable = setting.executable; + let serverOptions: ServerOptions | (() => Promise); - if (setting.mode === "pipe") { - if (!executable || executable === "") { - const downloadedPath = await ensureServerBinary(context, channel); - if (downloadedPath) { - executable = downloadedPath; - } else { - window.showErrorMessage("Could not find or download clice executable."); - return; - } - } + if (setting.mode === "pipe") { + if (!executable || executable === "") { + const downloadedPath = await ensureServerBinary(context, channel); + if (downloadedPath) { + executable = downloadedPath; + } else { + window.showErrorMessage("Could not find or download clice executable."); + return; + } + } - let args = ["--mode=pipe"]; - serverOptions = { - run: { command: executable, args: args }, - debug: { command: executable, args: args } - }; - } else if (setting.mode === "socket") { - serverOptions = (): Promise => { - return new Promise((resolve, reject) => { - const client = new net.Socket(); - client.connect(setting.port, setting.host, () => { - resolve({ - reader: client, - writer: client, - }); - }); - client.on('error', (error) => { - reject(error); - }); - }); - }; - } else { - vscode.window.showErrorMessage("Invalid mode, please set the mode to 'pipe' or 'socket'."); - return - } + let args = ["--mode=pipe"]; + serverOptions = { + run: { command: executable, args: args }, + debug: { command: executable, args: args }, + }; + } else if (setting.mode === "socket") { + serverOptions = (): Promise => { + return new Promise((resolve, reject) => { + const client = new net.Socket(); + client.connect(setting.port, setting.host, () => { + resolve({ + reader: client, + writer: client, + }); + }); + client.on("error", (error) => { + reject(error); + }); + }); + }; + } else { + vscode.window.showErrorMessage("Invalid mode, please set the mode to 'pipe' or 'socket'."); + return; + } - const clientOptions: LanguageClientOptions = { - documentSelector: [{ scheme: 'file', language: 'cpp' }], - outputChannel: channel, - traceOutputChannel: verboseChannel, - synchronize: { - fileEvents: workspace.createFileSystemWatcher('**/.clientrc') - } - }; + const clientOptions: LanguageClientOptions = { + documentSelector: [{ scheme: "file", language: "cpp" }], + outputChannel: channel, + traceOutputChannel: verboseChannel, + synchronize: { + fileEvents: workspace.createFileSystemWatcher("**/.clientrc"), + }, + }; - client = new LanguageClient( - 'clice', - 'clice', - serverOptions, - clientOptions - ); + client = new LanguageClient("clice", "clice", serverOptions, clientOptions); - await registerCommands(client, context); + await registerCommands(client, context); - await client.start(); + await client.start(); } export function deactivate(): Thenable | undefined { - if (!client) { - return undefined; - } - let ret = client.stop(); - return ret; + if (!client) { + return undefined; + } + let ret = client.stop(); + return ret; } diff --git a/editors/vscode/src/feature/header.ts b/editors/vscode/src/feature/header.ts index 04b514f91..06dffb21a 100644 --- a/editors/vscode/src/feature/header.ts +++ b/editors/vscode/src/feature/header.ts @@ -1,35 +1,37 @@ -import * as vscode from 'vscode'; -import { DocumentUri } from 'vscode-languageclient/node'; +import * as vscode from "vscode"; +import { DocumentUri } from "vscode-languageclient/node"; let provider: HeaderContextProvider | undefined = undefined; export type HeaderContext = { - file: string, - index: number, - include: number + file: string; + index: number; + include: number; }; export type HeaderContextSwitchParams = { - header: DocumentUri, - context: HeaderContext, + header: DocumentUri; + context: HeaderContext; }; export type IncludeLocation = { - line: number, - filename: string + line: number; + filename: string; }; export class TreeItem extends vscode.TreeItem { - children: Array = [] + children: Array = []; context: HeaderContext | undefined = undefined; -}; +} export class HeaderContextProvider implements vscode.TreeDataProvider { - private _onDidChangeTreeData: vscode.EventEmitter = new vscode.EventEmitter(); - readonly onDidChangeTreeData: vscode.Event = this._onDidChangeTreeData.event; + private _onDidChangeTreeData: vscode.EventEmitter = + new vscode.EventEmitter(); + readonly onDidChangeTreeData: vscode.Event = + this._onDidChangeTreeData.event; - header: string = "" - items: Array = [] + header: string = ""; + items: Array = []; update(contexts: Array>) { /// Create groups @@ -60,11 +62,11 @@ export class HeaderContextProvider implements vscode.TreeDataProvider getChildren(element?: TreeItem) { return element ? element.children : this.items; } -}; - - +} export function registerHeaderContextView() { provider = new HeaderContextProvider(); - let treeView = vscode.window.createTreeView("header-contexts", { treeDataProvider: provider }); + let treeView = vscode.window.createTreeView("header-contexts", { + treeDataProvider: provider, + }); } diff --git a/editors/vscode/src/feature/highlight.ts b/editors/vscode/src/feature/highlight.ts index bd2fb83e9..62a604747 100644 --- a/editors/vscode/src/feature/highlight.ts +++ b/editors/vscode/src/feature/highlight.ts @@ -1,28 +1,28 @@ -import * as vscode from 'vscode'; +import * as vscode from "vscode"; -const rainbowColors = [ - "#56B6C2", - "#61AFEF", - "#C678DD", - "#E06C75", - "#98C379", - "#D19A66", - "#E5C07B" -]; +const rainbowColors = ["#56B6C2", "#61AFEF", "#C678DD", "#E06C75", "#98C379", "#D19A66", "#E5C07B"]; const textEditorDecorationTypes = rainbowColors.map((color) => { return vscode.window.createTextEditorDecorationType({ - color: color + color: color, }); }); -export function highlightDocument(document: vscode.TextDocument, legend: vscode.SemanticTokensLegend, semanticTokens: vscode.SemanticTokens) { +export function highlightDocument( + document: vscode.TextDocument, + legend: vscode.SemanticTokensLegend, + semanticTokens: vscode.SemanticTokens, +) { const editor = vscode.window.activeTextEditor; - if (!editor || editor.document !== document) { return; } - const angleIndex = legend?.tokenTypes.indexOf('angle'); - const leftIndex = legend?.tokenModifiers.indexOf('left'); - const rightIndex = legend?.tokenModifiers.indexOf('right'); - if (leftIndex === undefined || rightIndex === undefined || angleIndex === undefined) { return; } + if (!editor || editor.document !== document) { + return; + } + const angleIndex = legend?.tokenTypes.indexOf("angle"); + const leftIndex = legend?.tokenModifiers.indexOf("left"); + const rightIndex = legend?.tokenModifiers.indexOf("right"); + if (leftIndex === undefined || rightIndex === undefined || angleIndex === undefined) { + return; + } const decorations = new Map(); let level = 0; @@ -32,7 +32,8 @@ export function highlightDocument(document: vscode.TextDocument, legend: vscode. // [line, startCharacter, length, tokenType, tokenModifiers] for (let i = 0; i < semanticTokens.data.length; i += 5) { - const [lineDelta, startDelta, length, tokenType, tokenModifiers] = semanticTokens.data.slice(i, i + 5); + const [lineDelta, startDelta, length, tokenType, tokenModifiers] = + semanticTokens.data.slice(i, i + 5); lastLine += lineDelta; lastStart = lineDelta === 0 ? lastStart + startDelta : startDelta; @@ -52,15 +53,11 @@ export function highlightDocument(document: vscode.TextDocument, legend: vscode. if (tokenModifiers & (1 << leftIndex)) { level += 1; - } } } for (const [level, ranges] of decorations) { - editor.setDecorations( - textEditorDecorationTypes[level], - ranges - ); + editor.setDecorations(textEditorDecorationTypes[level], ranges); } } diff --git a/editors/vscode/src/setting.ts b/editors/vscode/src/setting.ts index 6467bda77..54f553d05 100644 --- a/editors/vscode/src/setting.ts +++ b/editors/vscode/src/setting.ts @@ -1,31 +1,34 @@ -import * as vscode from 'vscode'; +import * as vscode from "vscode"; interface Setting { - executable: string | undefined, - mode: string, - host: string, - port: number, + executable: string | undefined; + mode: string; + host: string; + port: number; } export function getSetting(): Setting | undefined { - const setting = vscode.workspace.getConfiguration('clice') - const executable = setting.get('executable'); - const mode = setting.get('mode'); + const setting = vscode.workspace.getConfiguration("clice"); + const executable = setting.get("executable"); + const mode = setting.get("mode"); if (mode !== "pipe" && mode !== "socket") { vscode.window.showErrorMessage(`Unexpected mode: ${mode}`); - return undefined + return undefined; } - const host = setting.get('host')!; - const port = setting.get('port')!; + const host = setting.get("host")!; + const port = setting.get("port")!; if (mode === "socket" && (!host || !port)) { - vscode.window.showErrorMessage('Socket mode requires both host and port to be configured.'); + vscode.window.showErrorMessage("Socket mode requires both host and port to be configured."); return undefined; } return { - executable, mode, host, port, - } + executable, + mode, + host, + port, + }; } diff --git a/editors/vscode/src/test/extension.test.ts b/editors/vscode/src/test/extension.test.ts index 4ca0ab419..8bcfbcdb7 100644 --- a/editors/vscode/src/test/extension.test.ts +++ b/editors/vscode/src/test/extension.test.ts @@ -1,15 +1,15 @@ -import * as assert from 'assert'; +import * as assert from "assert"; // You can import and use all API from the 'vscode' module // as well as import your extension to test it -import * as vscode from 'vscode'; +import * as vscode from "vscode"; // import * as myExtension from '../../extension'; -suite('Extension Test Suite', () => { - vscode.window.showInformationMessage('Start all tests.'); +suite("Extension Test Suite", () => { + vscode.window.showInformationMessage("Start all tests."); - test('Sample test', () => { - assert.strictEqual(-1, [1, 2, 3].indexOf(5)); - assert.strictEqual(-1, [1, 2, 3].indexOf(0)); - }); + test("Sample test", () => { + assert.strictEqual(-1, [1, 2, 3].indexOf(5)); + assert.strictEqual(-1, [1, 2, 3].indexOf(0)); + }); }); diff --git a/editors/vscode/tsconfig.json b/editors/vscode/tsconfig.json index 8a79f20f5..bb686be9e 100644 --- a/editors/vscode/tsconfig.json +++ b/editors/vscode/tsconfig.json @@ -1,16 +1,14 @@ { - "compilerOptions": { - "module": "Node16", - "target": "ES2022", - "lib": [ - "ES2022" - ], - "sourceMap": true, - "rootDir": "src", - "strict": true /* enable all strict type-checking options */ - /* Additional Checks */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - } + "compilerOptions": { + "module": "Node16", + "target": "ES2022", + "lib": ["ES2022"], + "sourceMap": true, + "rootDir": "src", + "strict": true /* enable all strict type-checking options */ + /* Additional Checks */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + } } diff --git a/editors/vscode/webpack.config.js b/editors/vscode/webpack.config.js index 9a1604475..5b6ec10ce 100644 --- a/editors/vscode/webpack.config.js +++ b/editors/vscode/webpack.config.js @@ -1,48 +1,48 @@ //@ts-check -'use strict'; +"use strict"; -const path = require('path'); +const path = require("path"); //@ts-check /** @typedef {import('webpack').Configuration} WebpackConfig **/ /** @type WebpackConfig */ const extensionConfig = { - target: 'node', // VS Code extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ - mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') + target: "node", // VS Code extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ + mode: "none", // this leaves the source code as close as possible to the original (when packaging we set this to 'production') - entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ - output: { - // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ - path: path.resolve(__dirname, 'dist'), - filename: 'extension.js', - libraryTarget: 'commonjs2' - }, - externals: { - vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ - // modules added here also need to be added in the .vscodeignore file - }, - resolve: { - // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader - extensions: ['.ts', '.js'] - }, - module: { - rules: [ - { - test: /\.ts$/, - exclude: /node_modules/, - use: [ - { - loader: 'ts-loader' - } - ] - } - ] - }, - devtool: 'nosources-source-map', - infrastructureLogging: { - level: "log", // enables logging required for problem matchers - }, + entry: "./src/extension.ts", // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ + output: { + // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ + path: path.resolve(__dirname, "dist"), + filename: "extension.js", + libraryTarget: "commonjs2", + }, + externals: { + vscode: "commonjs vscode", // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ + // modules added here also need to be added in the .vscodeignore file + }, + resolve: { + // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader + extensions: [".ts", ".js"], + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { + loader: "ts-loader", + }, + ], + }, + ], + }, + devtool: "nosources-source-map", + infrastructureLogging: { + level: "log", // enables logging required for problem matchers + }, }; -module.exports = [ extensionConfig ]; +module.exports = [extensionConfig]; diff --git a/editors/zed/Cargo.toml b/editors/zed/Cargo.toml index 09aaf32fc..80071f3e8 100644 --- a/editors/zed/Cargo.toml +++ b/editors/zed/Cargo.toml @@ -2,12 +2,12 @@ name = "zed_clice" version = "0.1.0" edition = "2021" -publish = false license = "MIT" +publish = false [lib] -path = "src/clice.rs" crate-type = ["cdylib"] +path = "src/clice.rs" [dependencies] zed_extension_api = "0.1.0" diff --git a/pixi.lock b/pixi.lock index f49d7723a..6009c0009 100644 --- a/pixi.lock +++ b/pixi.lock @@ -216,21 +216,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/7f/a1a97644e39e7316d850784c642093c99df1290a460df4ede27659056834/filelock-3.20.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/c4/b2d28e9d2edf4f1713eb3c29307f1a63f3d67cf09bdda29715a36a68921a/pre_commit-4.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/79/0c/c05523fa3181fdf0c9c52a6ba91a23fbf3246cc095f26f6516f9c60e6771/virtualenv-20.35.4-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda @@ -275,21 +266,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-h8577fbf_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/7f/a1a97644e39e7316d850784c642093c99df1290a460df4ede27659056834/filelock-3.20.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/c4/b2d28e9d2edf4f1713eb3c29307f1a63f3d67cf09bdda29715a36a68921a/pre_commit-4.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/79/0c/c05523fa3181fdf0c9c52a6ba91a23fbf3246cc095f26f6516f9c60e6771/virtualenv-20.35.4-py3-none-any.whl win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-h4c7d964_0.conda @@ -326,22 +308,190 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_33.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_33.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/7f/a1a97644e39e7316d850784c642093c99df1290a460df4ede27659056834/filelock-3.20.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/c4/b2d28e9d2edf4f1713eb3c29307f1a63f3d67cf09bdda29715a36a68921a/pre_commit-4.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/79/0c/c05523fa3181fdf0c9c52a6ba91a23fbf3246cc095f26f6516f9c60e6771/virtualenv-20.35.4-py3-none-any.whl + format: + channels: + - url: https://conda.anaconda.org/conda-forge/ + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45-default_hfdba357_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-20-20.1.8-default_h99862b1_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-20.1.8-default_h36abe19_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21-21.1.7-default_h99862b1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21.1.7-default_h99862b1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clangxx-20.1.8-default_h363a0c9_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.1-hc85cc9f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/compiler-rt-20.1.8-hb700be7_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_linux-64-20.1.8-hffcefe0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fd-find-10.3.0-hdab8a38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.2.0-h96c4ede_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.2.0-hdb7739f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-14.2.0-h96c4ede_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.2.0-h2ead766_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp20.1-20.1.8-default_h99862b1_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.7-default_h99862b1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.17.0-h4e3cde8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.2.0-h9c4974d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm20-20.1.8-hf7376ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.2.0-hed042b8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.1-h0c1763c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.2.0-h9c4974d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lld-20.1.8-hef48ded_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-20-20.1.8-h3b15d91_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-20.1.8-hb700be7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ninja-1.13.2-h171cf75_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.21.1-h4a9c4b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prettier-3.7.4-h4c22ac6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.2-h32b2ec7_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.14.10-h4196e79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/stylua-2.3.1-hb17b654_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h0157908_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tombi-0.7.12-hb17b654_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-h8577fbf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-20-20.1.8-default_h73dfc95_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-20.1.8-default_hf9bcbb7_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-format-21-21.1.7-default_hf3020a7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-format-21.1.7-default_hf3020a7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-20.1.8-default_h36137df_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.1-h54ad630_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-20.1.8-h855ad52_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-20.1.8-he32a8d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fd-find-10.3.0-h0ca00b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp20.1-20.1.8-default_h73dfc95_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp21.1-21.1.7-default_hf3020a7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.17.0-hdece5d2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-20.1.8-h6dc3340_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libcxx-headers-20.1.8-h707e725_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.3-haf25636_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-he5f378a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm20-20.1.8-h8e0c9ce_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm21-21.1.8-h8e0c9ce_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.67.0-hc438710_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.1-h1b79a29_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.1-h0ff4647_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.1-h9329255_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lld-20.1.8-ha4b1419_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-20-20.1.8-h91fd4e7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-20.1.8-h855ad52_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ninja-1.13.2-h49c215f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.21.1-hf2fe37f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.0-h5503f6c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/prettier-3.7.4-h79221d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.14.2-h40d2674_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.6-h5505292_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.14.10-hb0cad00_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/stylua-2.3.1-h8d80559_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tombi-0.7.12-h6fdd925_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-h8577fbf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-20-20.1.8-default_hac490eb_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-20.1.8-default_hac490eb_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clang-format-21.1.7-default_hac490eb_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/clangxx-20.1.8-default_hac490eb_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.1-hdcbee5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/compiler-rt-20.1.8-h49e36cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_win-64-20.1.8-h49e36cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fd-find-10.3.0-h77a83cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.1-h637d24d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.17.0-h43ecb02_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.3-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h52bdfb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libllvm20-20.1.8-h830ff33_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.1-hf5d6505_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h3cfd58e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-h779ef1b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lld-20.1.8-hc465015_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-tools-20.1.8-h752b59f_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ninja-1.13.2-h477610d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.21.1-he453025_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.0-h725018a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/prettier-3.7.4-hc95d2ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.2-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.14.10-h37e10c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/stylua-2.3.1-h18a1a76_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h2c6b04d_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tombi-0.7.12-h18a1a76_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-h8577fbf_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h2b53caa_33.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_33.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_33.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda package: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -415,21 +565,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-gpl-tools-5.8.1-hbcc6ac9_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-tools-5.8.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/7f/a1a97644e39e7316d850784c642093c99df1290a460df4ede27659056834/filelock-3.20.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/c4/b2d28e9d2edf4f1713eb3c29307f1a63f3d67cf09bdda29715a36a68921a/pre_commit-4.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/79/0c/c05523fa3181fdf0c9c52a6ba91a23fbf3246cc095f26f6516f9c60e6771/virtualenv-20.35.4-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda @@ -478,21 +619,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-gpl-tools-5.8.1-h9a6d368_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-tools-5.8.1-h39f12f2_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/7f/a1a97644e39e7316d850784c642093c99df1290a460df4ede27659056834/filelock-3.20.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/c4/b2d28e9d2edf4f1713eb3c29307f1a63f3d67cf09bdda29715a36a68921a/pre_commit-4.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/79/0c/c05523fa3181fdf0c9c52a6ba91a23fbf3246cc095f26f6516f9c60e6771/virtualenv-20.35.4-py3-none-any.whl win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-h4c7d964_0.conda @@ -532,22 +664,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.8.1-h208afaa_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xz-tools-5.8.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/7f/a1a97644e39e7316d850784c642093c99df1290a460df4ede27659056834/filelock-3.20.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/c4/b2d28e9d2edf4f1713eb3c29307f1a63f3d67cf09bdda29715a36a68921a/pre_commit-4.5.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/79/0c/c05523fa3181fdf0c9c52a6ba91a23fbf3246cc095f26f6516f9c60e6771/virtualenv-20.35.4-py3-none-any.whl packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 @@ -582,6 +705,16 @@ packages: purls: [] size: 3747046 timestamp: 1764007847963 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45-default_hfdba357_105.conda + sha256: 17fbb32191430310d3eb8309f80a8df54f0d66eda9cf84b2ae5113e6d74e24d8 + md5: e410a8f80e22eb6d840e39ac6a34bd0e + depends: + - ld_impl_linux-64 2.45 default_hbd61a6d_105 + - sysroot_linux-64 + - zstd >=1.5.7,<1.6.0a0 + license: GPL-3.0-only + size: 3719982 + timestamp: 1766513109980 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda sha256: c30daba32ddebbb7ded490f0e371eae90f51e72db620554089103b4a6934b0d5 md5: 51a19bba1b8ebfb60df25cde030b7ebc @@ -654,11 +787,6 @@ packages: purls: [] size: 152432 timestamp: 1762967197890 -- pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - name: cfgv - version: 3.5.0 - sha256: a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 - requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-20.1.8-default_h36abe19_5.conda sha256: dfce7b8de6be7a988dab1092e2ad54fc544a572cc5ac7df28f8f48ab409814bc md5: b6ab4982173dcae265d545bec3a76a6c @@ -738,6 +866,69 @@ packages: purls: [] size: 73427981 timestamp: 1764398987103 +- conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21.1.7-default_h99862b1_2.conda + sha256: 8a9c2e0df0fd55da3ea9352fc356d1ca9d9312bbf275e1a5e22552bfb63affb9 + md5: 8e0b6ced8948217e4748ad0c26f8df4d + depends: + - __glibc >=2.17,<3.0.a0 + - clang-format-21 21.1.7 default_h99862b1_2 + - libclang-cpp21.1 >=21.1.7,<21.2.0a0 + - libgcc >=14 + - libllvm21 >=21.1.7,<21.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 27733 + timestamp: 1766016586518 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-format-21.1.7-default_hf3020a7_2.conda + sha256: 2b91ed7e567a1618fd342100ba43bcd670bff8a1183a5c65032cefc0a436d3d6 + md5: 37585890edaa4842a62037a7fa6e1e64 + depends: + - __osx >=11.0 + - clang-format-21 21.1.7 default_hf3020a7_2 + - libclang-cpp21.1 >=21.1.7,<21.2.0a0 + - libcxx >=21.1.7 + - libllvm21 >=21.1.7,<21.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 28328 + timestamp: 1766167306042 +- conda: https://conda.anaconda.org/conda-forge/win-64/clang-format-21.1.7-default_hac490eb_2.conda + sha256: afa22671525e890a98445d1c2abc35e8b87c4c208d053e6527c5d2cbf6f7c938 + md5: 8afc1288250ef6c77e8f7aa0df683a65 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 1233929 + timestamp: 1766022144370 +- conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21-21.1.7-default_h99862b1_2.conda + sha256: 4d360c464ddab6c47c8fceca87b625b58d6a3b3cd523958a314e8db7d5f4eb94 + md5: 5589c06b39ae5be8aca4d16e28a43518 + depends: + - __glibc >=2.17,<3.0.a0 + - libclang-cpp21.1 >=21.1.7,<21.2.0a0 + - libgcc >=14 + - libllvm21 >=21.1.7,<21.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 70516 + timestamp: 1766016504444 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-format-21-21.1.7-default_hf3020a7_2.conda + sha256: fe5588d72edbe9d464f24735ac3f8a167a150d9fc365523fdad8ba05e09d68b5 + md5: 1642e5fb3cd0e4e8e5d9ae2b68ba554e + depends: + - __osx >=11.0 + - libclang-cpp21.1 >=21.1.7,<21.2.0a0 + - libcxx >=21.1.7 + - libllvm21 >=21.1.7,<21.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 65217 + timestamp: 1766167190049 - conda: https://conda.anaconda.org/conda-forge/linux-64/clangxx-20.1.8-default_h363a0c9_5.conda sha256: d30843fc1012ff5fb6c95e07c15182d22f03a37c380ae350ba069adf75092828 md5: 692c84fedd1a3302ff26dbc9a211f626 @@ -918,15 +1109,40 @@ packages: purls: [] size: 3970670 timestamp: 1757411730313 -- pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - name: distlib - version: 0.4.0 - sha256: 9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 -- pypi: https://files.pythonhosted.org/packages/e3/7f/a1a97644e39e7316d850784c642093c99df1290a460df4ede27659056834/filelock-3.20.1-py3-none-any.whl - name: filelock - version: 3.20.1 - sha256: 15d9e9a67306188a44baa72f569d2bfd803076269365fdea0934385da4dc361a - requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/fd-find-10.3.0-hdab8a38_0.conda + sha256: 55d3011ca72e1d97acc651b2af5d4d4d785988a8cfa9026205e9cf11f2d4ee67 + md5: 1b8aaa7bb23496abb0e23369db7fb5b7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + size: 1209421 + timestamp: 1757336717570 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fd-find-10.3.0-h0ca00b2_0.conda + sha256: 87360775e2416402e00f386855d0a6d68e9e94db9016f00fc0ebf99e5c71f92a + md5: 7e2ef0657717cee5e385cd5ab26e0365 + depends: + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 1050638 + timestamp: 1757337263602 +- conda: https://conda.anaconda.org/conda-forge/win-64/fd-find-10.3.0-h77a83cd_0.conda + sha256: 5c5165853630b8473f0963c1d3018e439e4f90f85443c5d0d00e6ec45457774a + md5: 01b79e8a4cf41a31737ffbbda6a25aab + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + size: 1196708 + timestamp: 1757337405047 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.2.0-h96c4ede_2.conda sha256: 6592ff15983759799df89d0a992268809e9ce0376933e053716660ecda19d87e md5: 7f23fa6a103277a8491d3d10240ebd09 @@ -977,13 +1193,36 @@ packages: purls: [] size: 14611960 timestamp: 1740241005796 -- pypi: https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl - name: identify - version: 2.6.15 - sha256: 1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757 - requires_dist: - - ukkonen ; extra == 'license' - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12129203 + timestamp: 1720853576813 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 11857802 + timestamp: 1720853997952 +- conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.1-h637d24d_0.conda + sha256: bee083d5a0f05c380fcec1f30a71ef5518b23563aeb0a21f6b60b792645f9689 + md5: cb8048bed35ef01431184d6a88e46b3e + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + size: 13849749 + timestamp: 1766299627069 - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl name: iniconfig version: 2.3.0 @@ -1064,6 +1303,17 @@ packages: purls: [] size: 725545 timestamp: 1764007826689 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda + sha256: 1027bd8aa0d5144e954e426ab6218fd5c14e54a98f571985675468b339c808ca + md5: 3ec0aa5037d39b06554109a01e6fb0c6 + depends: + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-64 2.45 + license: GPL-3.0-only + size: 730831 + timestamp: 1766513089214 - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp20.1-20.1.8-default_h99862b1_5.conda sha256: b9f0e167cdf5cbe076231788fcb3affe25914534d84ab249258161b693c4cfd2 md5: 33acc83688f092f96ea2ead08e3b4dcd @@ -1089,6 +1339,29 @@ packages: purls: [] size: 13959982 timestamp: 1764397711426 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.7-default_h99862b1_2.conda + sha256: b41513470499628c0f9b7e1b057c8d7641a75be482d4a296a4eb41234aaac971 + md5: fd47a1021b2a3a91b0c05f4d7b529b68 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libllvm21 >=21.1.7,<21.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 21055117 + timestamp: 1766016009924 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp21.1-21.1.7-default_hf3020a7_2.conda + sha256: cd7269ab02e1152fec0c8d017700d6c9b2a6a817c809216c47fa5a805f82849f + md5: e1a690c66f36a1ed451c56db826b9f36 + depends: + - __osx >=11.0 + - libcxx >=21.1.7 + - libllvm21 >=21.1.7,<21.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 13672685 + timestamp: 1766166376555 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.17.0-h4e3cde8_1.conda sha256: 2d7be2fe0f58a0945692abee7bb909f8b19284b518d958747e5ff51d0655c303 md5: 117499f93e892ea1e57fdca16c2e8351 @@ -1147,6 +1420,15 @@ packages: purls: [] size: 568715 timestamp: 1764676451068 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_0.conda + sha256: 82e228975fd491bcf1071ecd0a6ec2a0fcc5f57eb0bd1d52cb13a18d57c67786 + md5: 780f0251b757564e062187044232c2b7 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 569118 + timestamp: 1765919724254 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-devel-20.1.8-h6dc3340_3.conda sha256: 860588fb7b8c9227cfae68cf410c885fb0e05a635f3daddef9457c429a9704ba md5: 78233f1b892fc02bca12b2daf3bd8d48 @@ -1404,6 +1686,35 @@ packages: purls: [] size: 55313 timestamp: 1757354184572 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda + sha256: 91bb4f5be1601b40b4995911d785e29387970f0b3c80f33f7f9028f95335399f + md5: 1a2708a460884d6861425b7f9a7bef99 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 44333366 + timestamp: 1765959132513 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm21-21.1.8-h8e0c9ce_0.conda + sha256: 3f4512155aca799a25937f9ee794490794fb33f8f90a5e6532d8be869e7d79a0 + md5: 8fc5b2387a7907cd58805668dad3b70f + depends: + - __osx >=11.0 + - libcxx >=19 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 29398498 + timestamp: 1765924904821 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 md5: 1a580f7796c7bf6393fddb8bbbde58dc @@ -1562,6 +1873,25 @@ packages: purls: [] size: 938979 timestamp: 1764359444435 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.1-h0c1763c_1.conda + sha256: 5ef162b2a1390d1495a759734afe2312a358a58441cf8f378be651903646f3b7 + md5: ad1fd565aff83b543d726382c0ab0af2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: blessing + size: 940686 + timestamp: 1766319628770 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.1-h1b79a29_1.conda + sha256: f2c3cbf2ca7d697098964a748fbf19d6e4adcefa23844ec49f0166f1d36af83c + md5: 8c3951797658e10b610929c3e57e9ad9 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: blessing + size: 905861 + timestamp: 1766319901587 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.1-h9a5124b_0.conda sha256: a46b167447e2a9e38586320c30b29e3b68b6f7e6b873c18d6b1aa2efd2626917 md5: 67e50e5bd4e5e2310d66b88c4da50096 @@ -1583,6 +1913,16 @@ packages: purls: [] size: 1291059 timestamp: 1764359545703 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.1-hf5d6505_1.conda + sha256: d6d86715a1afe11f626b7509935e9d2e14a4946632c0ac474526e20fc6c55f99 + md5: be65be5f758709fc01b01626152e96b0 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: blessing + size: 1292859 + timestamp: 1766319616777 - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 md5: eecce068c7e4eddeb169591baac20ac4 @@ -1665,6 +2005,15 @@ packages: purls: [] size: 40235 timestamp: 1764790744114 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee + md5: db409b7c1720428638e7c0d509d3e1b5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + size: 40311 + timestamp: 1766271528534 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda sha256: c180f4124a889ac343fc59d15558e93667d894a966ec6fdb61da1604481be26b md5: 0f03292cc56bf91a077a134ea8747118 @@ -1715,6 +2064,35 @@ packages: purls: [] size: 45292 timestamp: 1761015784683 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda + sha256: ec0735ae56c3549149eebd7dc22c0bed91fd50c02eaa77ff418613ddda190aa8 + md5: e512be7dc1f84966d50959e900ca121f + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.15.1 ha9997c6_0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + size: 45283 + timestamp: 1761015644057 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.1-h9329255_0.conda + sha256: c409e384ddf5976a42959265100d6b2c652017d250171eb10bae47ef8166193f + md5: fb5ce61da27ee937751162f86beba6d1 + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.15.1 h0ff4647_0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + size: 40607 + timestamp: 1761016108361 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.1-hba2cd1d_0.conda sha256: fa01101fe7d95085846c16825f0e7dc0efe1f1c7438a96fe7395c885d6179495 md5: a53d5f7fff38853ddb6bdc8fb609c039 @@ -1749,6 +2127,38 @@ packages: purls: [] size: 43209 timestamp: 1761016354235 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-h779ef1b_1.conda + sha256: 8b47d5fb00a6ccc0f495d16787ab5f37a434d51965584d6000966252efecf56d + md5: 68dc154b8d415176c07b6995bd3a65d9 + depends: + - icu >=78.1,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libxml2-16 2.15.1 h3cfd58e_1 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + size: 43387 + timestamp: 1766327259710 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda + sha256: 71436e72a286ef8b57d6f4287626ff91991eb03c7bdbe835280521791efd1434 + md5: e7733bc6785ec009e47a224a71917e84 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.15.1 + license: MIT + license_family: MIT + size: 556302 + timestamp: 1761015637262 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-hf2a90c1_0.conda sha256: f5220ff49efc31431279859049199b9250e79f98c1dee1da12feb74bda2d9cf1 md5: 23720d17346b21efb08d68c2255c8431 @@ -1766,6 +2176,21 @@ packages: purls: [] size: 554734 timestamp: 1761015772672 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.1-h0ff4647_0.conda + sha256: ebe2dd9da94280ad43da936efa7127d329b559f510670772debc87602b49b06d + md5: 438c97d1e9648dd7342f86049dd44638 + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - libxml2 2.15.1 + license: MIT + license_family: MIT + size: 464952 + timestamp: 1761016087733 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.1-h8eac4d7_0.conda sha256: 3f3f9ba64a3fca15802d4eaf2a97696e6dcd916effa6a683756fd9f11245df5a md5: cf7291a970b93fe3bb726879f2037af8 @@ -1782,6 +2207,23 @@ packages: purls: [] size: 464186 timestamp: 1761016258891 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h3cfd58e_1.conda + sha256: a857e941156b7f462063e34e086d212c6ccbc1521ebdf75b9ed66bd90add57dc + md5: 07d73826fde28e7dbaec52a3297d7d26 + depends: + - icu >=78.1,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.1,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libxml2 2.15.1 + license: MIT + license_family: MIT + size: 518964 + timestamp: 1766327232819 - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h692994f_0.conda sha256: 04129dc2df47a01c55e5ccf8a18caefab94caddec41b3b10fbc409e980239eb9 md5: 70ca4626111579c3cd63a7108fe737f9 @@ -2034,11 +2476,42 @@ packages: purls: [] size: 309417 timestamp: 1763688227932 -- pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl - name: nodeenv - version: 1.9.1 - sha256: ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' +- conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.21.1-h4a9c4b4_0.conda + sha256: 7808695078b286548a56a0833bbe65f0d2a547bc134bc8a12d106b384d048e17 + md5: 3fe7cdb8ea3181917e358f31a9a0b514 + depends: + - libgcc >=14 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=14 + - openssl >=3.5.4,<4.0a0 + - icu >=75.1,<76.0a0 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + size: 24194392 + timestamp: 1765444695531 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.21.1-hf2fe37f_0.conda + sha256: 16fc66a8f7c566aa626833482bfeb20f6a1953861ba5d7e91eb4f72c600c4151 + md5: cd2e913e4e61a013e1707daf551165d3 + depends: + - __osx >=11.0 + - libcxx >=19 + - openssl >=3.5.4,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - icu >=75.1,<76.0a0 + - libuv >=1.51.0,<2.0a0 + license: MIT + license_family: MIT + size: 16727525 + timestamp: 1765374502949 +- conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.21.1-he453025_0.conda + sha256: b0f3bfbd1682c5e73ea424368c57b3a6b411e6368dadaf1c8cf4772723787513 + md5: df959f61eb2ce7872c981a2719a36e18 + license: MIT + license_family: MIT + size: 29798671 + timestamp: 1765374524747 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda sha256: a47271202f4518a484956968335b2521409c8173e123ab381e775c358c67fe6d md5: 9ee58d5c534af06558933af3c845a780 @@ -2080,22 +2553,6 @@ packages: version: '25.0' sha256: 29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl - name: platformdirs - version: 4.5.1 - sha256: d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31 - requires_dist: - - furo>=2025.9.25 ; extra == 'docs' - - proselint>=0.14 ; extra == 'docs' - - sphinx-autodoc-typehints>=3.2 ; extra == 'docs' - - sphinx>=8.2.3 ; extra == 'docs' - - appdirs==1.4.4 ; extra == 'test' - - covdefaults>=2.3 ; extra == 'test' - - pytest-cov>=7 ; extra == 'test' - - pytest-mock>=3.15.1 ; extra == 'test' - - pytest>=8.4.2 ; extra == 'test' - - mypy>=1.18.2 ; extra == 'type' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl name: pluggy version: 1.6.0 @@ -2107,17 +2564,41 @@ packages: - pytest-benchmark ; extra == 'testing' - coverage ; extra == 'testing' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/5d/c4/b2d28e9d2edf4f1713eb3c29307f1a63f3d67cf09bdda29715a36a68921a/pre_commit-4.5.0-py2.py3-none-any.whl - name: pre-commit - version: 4.5.0 - sha256: 25e2ce09595174d9c97860a95609f9f852c0614ba602de3561e267547f2335e1 - requires_dist: - - cfgv>=2.0.0 - - identify>=1.0.0 - - nodeenv>=0.11.1 - - pyyaml>=5.1 - - virtualenv>=20.10.0 - requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/prettier-3.7.4-h4c22ac6_0.conda + sha256: 6f702c0b40508b245f166cc5b339fc7eb57ab02470a00466aed2bc6e98d791cb + md5: eb862ee74ff6beeee4378f4436e2e9a6 + depends: + - nodejs + - __glibc >=2.17,<3.0.a0 + - nodejs >=22.19.0,<23.0a0 + license: MIT + license_family: MIT + size: 1102504 + timestamp: 1764738744929 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/prettier-3.7.4-h79221d7_0.conda + sha256: 7e5f42737afb5919b13e379d4bcba1b19f54d746a23150116c3c2d856072014d + md5: f84e9db3c73c179dee0952eff5846188 + depends: + - nodejs + - __osx >=11.0 + - nodejs >=22.19.0,<23.0a0 + license: MIT + license_family: MIT + size: 1101665 + timestamp: 1764738820106 +- conda: https://conda.anaconda.org/conda-forge/win-64/prettier-3.7.4-hc95d2ff_0.conda + sha256: 28a128bd45b74ba5e9a4dee0872475453cbec1a39b7a97494239dc26ff9dab61 + md5: 2de1c3bfaf5da770c37c01ad41b80283 + depends: + - nodejs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - nodejs >=22.19.0,<23.0a0 + license: MIT + license_family: MIT + size: 1105059 + timestamp: 1764738810596 - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl name: pygments version: 2.19.2 @@ -2247,21 +2728,6 @@ packages: purls: [] size: 6989 timestamp: 1752805904792 -- pypi: https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl - name: pyyaml - version: 6.0.3 - sha256: 4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl - name: pyyaml - version: 6.0.3 - sha256: 34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 - requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 md5: d7d95fc8287ea7bf33e0e7116d2b95ec @@ -2304,6 +2770,77 @@ packages: purls: [] size: 185448 timestamp: 1748645057503 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.14.10-h4196e79_0.conda + noarch: python + sha256: 997b45ce89554f677e4a30cd1d64565949be9d25c806727c3d844fee0d55d7d2 + md5: ddecdee0806589993d96a950ad51b927 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + constrains: + - __glibc >=2.17 + license: MIT + size: 11472103 + timestamp: 1766094973645 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.14.10-hb0cad00_0.conda + noarch: python + sha256: dcae2c2d8c3a07782c0ce900f44488e2c2a2acd3720850181165a4e0034219fc + md5: d506e661dcc8c2053b2661edb0d3c57c + depends: + - python + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: MIT + size: 10468468 + timestamp: 1766095111371 +- conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.14.10-h37e10c4_0.conda + noarch: python + sha256: 2ca5b7a6ab0a4cddec16f390e1c2d89b5cacd1780963745e463f1bb2e8ab4893 + md5: 987a8290e4bfd9e42e3c58be4481929c + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + size: 11908812 + timestamp: 1766095035171 +- conda: https://conda.anaconda.org/conda-forge/linux-64/stylua-2.3.1-hb17b654_1.conda + sha256: 55d6701de61979958ef23b1179158f691cc17bb4990b7b7d4fa2c15755b3f6b9 + md5: 946560e6fd16473525953ae27909e7a0 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + constrains: + - __glibc >=2.17 + license: MPL-2.0 + license_family: MOZILLA + size: 2043399 + timestamp: 1764712277790 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/stylua-2.3.1-h8d80559_1.conda + sha256: b289cc5b177372fcb4498e50448a636b9c0076c5093a344f76ea4dc19ee04bd5 + md5: c5034ca591220810f58cf0365a52677a + depends: + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: MPL-2.0 + license_family: MOZILLA + size: 1881779 + timestamp: 1764712349144 +- conda: https://conda.anaconda.org/conda-forge/win-64/stylua-2.3.1-h18a1a76_1.conda + sha256: 683f5c15da425c0a48a40474b97b5f81b1b7d9c3a3a10a503a10f5c4e065ebaa + md5: d33ff02becc3b0c8f41855615299a0c6 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MPL-2.0 + license_family: MOZILLA + size: 2085986 + timestamp: 1764712314965 - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h0157908_18.conda sha256: 69ab5804bdd2e8e493d5709eebff382a72fab3e9af6adf93a237ccf8f7dbd624 md5: 460eba7851277ec1fd80a1a24080787a @@ -2352,6 +2889,37 @@ packages: purls: [] size: 3472313 timestamp: 1763055164278 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tombi-0.7.12-hb17b654_0.conda + sha256: 972bd56e5e73e72411424d6d903f0267c18d684020aa2189dfb4a4fd86376076 + md5: bae1720cadffd3bfd69f965b2590cf6f + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + constrains: + - __glibc >=2.17 + license: MIT + size: 6029930 + timestamp: 1766862999011 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tombi-0.7.12-h6fdd925_0.conda + sha256: e75c9461c2e09e1f403e9d8541c16e6a74e8e6e09e1985dfdec7621030f8749d + md5: 0b1ba2fe993fff755eba4dccc33c2a50 + depends: + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: MIT + size: 5492298 + timestamp: 1766863033644 +- conda: https://conda.anaconda.org/conda-forge/win-64/tombi-0.7.12-h18a1a76_0.conda + sha256: 450a8b77b6196afa82ba74ae1b6e4d7ea850f22c5d3b0664ee917ceeb14393f0 + md5: ea6684215868ba15dd5d5239a33ea286 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + size: 6535168 + timestamp: 1766863032287 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 md5: 4222072737ccff51314b5ece9c7d6f5a @@ -2420,36 +2988,6 @@ packages: purls: [] size: 115073 timestamp: 1765216325898 -- pypi: https://files.pythonhosted.org/packages/79/0c/c05523fa3181fdf0c9c52a6ba91a23fbf3246cc095f26f6516f9c60e6771/virtualenv-20.35.4-py3-none-any.whl - name: virtualenv - version: 20.35.4 - sha256: c21c9cede36c9753eeade68ba7d523529f228a403463376cf821eaae2b650f1b - requires_dist: - - distlib>=0.3.7,<1 - - filelock>=3.12.2,<4 - - importlib-metadata>=6.6 ; python_full_version < '3.8' - - platformdirs>=3.9.1,<5 - - typing-extensions>=4.13.2 ; python_full_version < '3.11' - - furo>=2023.7.26 ; extra == 'docs' - - proselint>=0.13 ; extra == 'docs' - - sphinx>=7.1.2,!=7.3 ; extra == 'docs' - - sphinx-argparse>=0.4 ; extra == 'docs' - - sphinxcontrib-towncrier>=0.2.1a0 ; extra == 'docs' - - towncrier>=23.6 ; extra == 'docs' - - covdefaults>=2.3 ; extra == 'test' - - coverage-enable-subprocess>=1 ; extra == 'test' - - coverage>=7.2.7 ; extra == 'test' - - flaky>=3.7 ; extra == 'test' - - packaging>=23.1 ; extra == 'test' - - pytest-env>=0.8.2 ; extra == 'test' - - pytest-freezer>=0.4.8 ; (python_full_version >= '3.13' and platform_python_implementation == 'CPython' and sys_platform == 'win32' and extra == 'test') or (platform_python_implementation == 'GraalVM' and extra == 'test') or (platform_python_implementation == 'PyPy' and extra == 'test') - - pytest-mock>=3.11.1 ; extra == 'test' - - pytest-randomly>=3.12 ; extra == 'test' - - pytest-timeout>=2.1 ; extra == 'test' - - pytest>=7.4 ; extra == 'test' - - setuptools>=68 ; extra == 'test' - - time-machine>=2.10 ; platform_python_implementation == 'CPython' and extra == 'test' - requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.8.1-hbcc6ac9_2.conda sha256: 802725371682ea06053971db5b4fb7fbbcaee9cb1804ec688f55e51d74660617 md5: 68eae977d7d1196d32b636a026dc015d diff --git a/pixi.toml b/pixi.toml index 894f642c3..e9120171e 100644 --- a/pixi.toml +++ b/pixi.toml @@ -3,16 +3,14 @@ name = "clice" version = "0.1.0" description = "A next-generation C++ language server for modern C++" authors = [ - "ykiko ", - "clice contributors ", + "ykiko ", + "clice contributors ", ] - license = "Apache-2.0" license-file = "LICENSE" readme = "README.md" documentation = "https://clice.io" repository = "https://github.com/clice-io/clice" - channels = ["conda-forge"] platforms = ["win-64", "linux-64", "osx-arm64"] @@ -31,28 +29,69 @@ sysroot_linux-64 = "==2.17" gcc = "==14.2.0" gxx = "==14.2.0" -[target.win-64.activation] -scripts = ["scripts/activate_asan.bat"] - [target.linux-64.activation] scripts = ["scripts/activate_linux.sh"] +[target.win-64.activation] +scripts = ["scripts/activate_asan.bat"] + [feature.test.pypi-dependencies] pytest = "*" pytest-asyncio = ">=1.1.0" -pre-commit = ">=4.3.0" [feature.package.dependencies] xz = ">=5.8.1,<6" +[feature.format.dependencies] +ruff = "*" +tombi = "*" +stylua = "*" +fd-find = "*" +prettier = "*" +clang-format = "==21.1.7" + +[feature.format.tasks] +format-cpp = "fd -H -e cpp -e h -e cc -e hpp -x clang-format -i" +format-python = "ruff format ." +format-lua = "stylua ." +format-web = "fd -H -e js -e ts -e css -x prettier --write" +format-markdown = "fd -H -e md -x prettier --write" +format-json = "fd -H -e json -E package-lock.json -x prettier --write" +format-toml = "fd -H -e toml -x tombi format" +format-yaml = """ +fd -H -e yaml -e yml -x prettier --write && \ +fd -H "^\\.clang-(format|tidy)$" -x prettier --write --parser yaml +""" +format = { depends-on = [ + "format-cpp", + "format-python", + "format-lua", + "format-web", + "format-markdown", + "format-json", + "format-toml", + "format-yaml" +] } + +[feature.develop.tasks] +unit-test = './build/bin/unit_tests --test-dir="./tests/data"' +integration-test = 'pytest -s --log-cli-level=INFO tests/integration --executable=./build/bin/clice{% if pixi.is_win %}.exe{% endif %}' +xmake-test = "xmake test --verbose" + [environments] default = [] develop = ["test", "develop"] package = ["test", "package"] +format = ["format"] [tasks.ci-cmake-configure] args = ["build_type"] -cmd = ["cmake", "-B", "build", "-G", "Ninja", +cmd = [ + "cmake", + "-B", + "build", + "-G", + "Ninja", "-DCMAKE_BUILD_TYPE={{ build_type }}", "-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain.cmake", "-DCLICE_ENABLE_TEST=ON", @@ -62,12 +101,6 @@ cmd = ["cmake", "-B", "build", "-G", "Ninja", [tasks.cmake-build] cmd = "cmake --build build" -[feature.develop.tasks] -unit-test = './build/bin/unit_tests --test-dir="./tests/data"' -integration-test = 'pytest -s --log-cli-level=INFO tests/integration --executable=./build/bin/clice{% if pixi.is_win %}.exe{% endif %}' -ci-check = "pre-commit run --all-files" -xmake-test = "xmake test --verbose" - [tasks.ci-cmake-build] args = ["build_type"] depends-on = [ @@ -76,10 +109,7 @@ depends-on = [ ] [tasks.ci-cmake-test] -depends-on = [ - { task = "unit-test" }, - { task = "integration-test" }, -] +depends-on = [{ task = "unit-test" }, { task = "integration-test" }] [tasks.ci-xmake-configure] args = ["build_type"] @@ -91,7 +121,9 @@ cmd = "xmake build --verbose --diagnosis --all" [tasks.ci-xmake-build] args = ["build_type"] depends-on = [ - { task = "ci-xmake-configure", args = ["{{ build_type }}"] }, + { task = "ci-xmake-configure", args = [ + "{{ build_type }}", + ] }, { task = "xmake-build" }, ] @@ -99,16 +131,18 @@ depends-on = [ cmd = ["python3", "scripts/build-llvm.py"] [tasks.upload-llvm] -args = [ - "workflow_id", - "llvm_version", - { "arg" = "branch", default = "main" }, -] +args = ["workflow_id", "llvm_version", { "arg" = "branch", default = "main" }] cmd = [ - "gh", "workflow", "run", "upload-llvm.yml", - "--ref", "{{ branch }}", - "--field", "workflow_id={{workflow_id}}", - "--field", "version={{llvm_version}}", + "gh", + "workflow", + "run", + "upload-llvm.yml", + "--ref", + "{{ branch }}", + "--field", + "workflow_id={{workflow_id}}", + "--field", + "version={{llvm_version}}", ] [tasks.delete-artifacts] diff --git a/tests/data/clang_tidy/clice.toml b/tests/data/clang_tidy/clice.toml index 70c93aa47..16eeed519 100644 --- a/tests/data/clang_tidy/clice.toml +++ b/tests/data/clang_tidy/clice.toml @@ -1,6 +1,5 @@ -### clice configuration +## # clice configuration [project] - - # Enable clang-tidy diagnostics. - clang_tidy = true +# Enable clang-tidy diagnostics. +clang_tidy = true diff --git a/tests/pyproject.toml b/tests/pyproject.toml index a88667b14..0b269e243 100644 --- a/tests/pyproject.toml +++ b/tests/pyproject.toml @@ -3,20 +3,12 @@ name = "clice" version = "0.1.0" description = "clice is a language server for C/C++" readme = "README.md" -authors = [ - { name = "clice developers" } -] requires-python = ">=3.13" +authors = [{ name = "clice developers" }] dependencies = [] [dependency-groups] -dev = [ - "pre-commit>=4.3.0", - "pytest", - "pytest-asyncio>=1.1.0", -] +dev = ["pre-commit>=4.3.0", "pytest", "pytest-asyncio>=1.1.0"] [tool.pytest.ini_options] -markers = [ - "asyncio", -] +markers = ["asyncio"] diff --git a/tombi.toml b/tombi.toml new file mode 100644 index 000000000..ec766849a --- /dev/null +++ b/tombi.toml @@ -0,0 +1,6 @@ +# tombi.toml +[format.rules] +indent-style = "space" +indent-width = 4 +line-width = 120 +string-quote-style = "preserve" diff --git a/xmake.lua b/xmake.lua index 92d24d942..a8d659e38 100644 --- a/xmake.lua +++ b/xmake.lua @@ -147,7 +147,7 @@ end) target("clice", function() set_kind("binary") - add_files("bin/clice.cc") + add_files("src/clice.cc") add_deps("clice-core") -- workaround @@ -173,7 +173,7 @@ end) target("unit_tests", function() set_default(false) set_kind("binary") - add_files("bin/unit_tests.cc", "tests/unit/**.cpp") + add_files("tests/unit/unit_tests.cc", "tests/unit/**.cpp") add_includedirs(".", { public = true }) add_packages("cpptrace") From 02bd140bf2d5bfa59091fbfec746016e2d6959d8 Mon Sep 17 00:00:00 2001 From: ykiko Date: Sun, 28 Dec 2025 18:53:50 +0800 Subject: [PATCH 3/7] fix format check --- .coderabbit.yaml | 2 ++ .github/workflows/check-format.yml | 18 +++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 .coderabbit.yaml diff --git a/.coderabbit.yaml b/.coderabbit.yaml new file mode 100644 index 000000000..16329a3d8 --- /dev/null +++ b/.coderabbit.yaml @@ -0,0 +1,2 @@ +chat: + auto_reply: false diff --git a/.github/workflows/check-format.yml b/.github/workflows/check-format.yml index c8ef73cd2..7f3ecafc6 100644 --- a/.github/workflows/check-format.yml +++ b/.github/workflows/check-format.yml @@ -1,20 +1,20 @@ -name: check-format +name: format on: push: branches: [main] - pull_request: branches: [main] permissions: contents: read pull-requests: write + checks: write + issues: write jobs: - check: + check-format: runs-on: ubuntu-latest - steps: - name: Checkout code uses: actions/checkout@v4 @@ -28,19 +28,19 @@ jobs: cache: true locked: true - - name: Run check - id: precommit + - name: Run formatter run: pixi run format continue-on-error: true - name: Auto correct - uses: huacnlee/autocorrect-action@main + uses: huacnlee/autocorrect-action@v2 with: args: --lint ./docs continue-on-error: true - name: Suggest changes - uses: reviewdog/action-suggester@v1 + if: github.event_name == 'pull_request' + uses: reviewdog/action-suggester@v1.24.0 with: tool_name: "fmt" - fail_on_error: true + fail_level: any From 5dfb48c537cdcb628682229989ea243554bd26e1 Mon Sep 17 00:00:00 2001 From: ykiko Date: Sun, 28 Dec 2025 18:55:35 +0800 Subject: [PATCH 4/7] test format check --- pixi.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pixi.toml b/pixi.toml index e9120171e..3ce6f18fd 100644 --- a/pixi.toml +++ b/pixi.toml @@ -11,6 +11,7 @@ license-file = "LICENSE" readme = "README.md" documentation = "https://clice.io" repository = "https://github.com/clice-io/clice" + channels = ["conda-forge"] platforms = ["win-64", "linux-64", "osx-arm64"] From 2967a35cde1d059ea44faa5af211c0bfc6b79e7a Mon Sep 17 00:00:00 2001 From: ykiko Date: Sun, 28 Dec 2025 18:59:24 +0800 Subject: [PATCH 5/7] fix pixi format --- .github/workflows/check-format.yml | 2 +- .pre-commit-config.yaml | 31 ------------------------------ 2 files changed, 1 insertion(+), 32 deletions(-) delete mode 100644 .pre-commit-config.yaml diff --git a/.github/workflows/check-format.yml b/.github/workflows/check-format.yml index 7f3ecafc6..971026640 100644 --- a/.github/workflows/check-format.yml +++ b/.github/workflows/check-format.yml @@ -23,7 +23,7 @@ jobs: uses: prefix-dev/setup-pixi@v0.9.3 with: pixi-version: v0.61.0 - environments: develop + environments: format activate-environment: true cache: true locked: true diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 99f7c00b9..000000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# .pre-commit-config.yaml -exclude: "\\.patch$" - -repos: - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v6.0.0 - hooks: - - id: trailing-whitespace - - id: end-of-file-fixer - - id: check-yaml - - id: check-added-large-files - - id: check-merge-conflict - - - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.12.12 - hooks: - - id: ruff - args: [--fix] - - id: ruff-format - - - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v21.1.0 - hooks: - - id: clang-format - types_or: [c++, c] - - - repo: https://github.com/JohnnyMorganz/StyLua - rev: v2.1.0 - hooks: - - id: stylua-github # or stylua-system / stylua-github - files: '(^xmake\.lua$|^editors/nvim/(lua|plugin|test)/.*\.lua$)' From 980054ba1a8a58756d1ddc1a9d21e1f61d59f49a Mon Sep 17 00:00:00 2001 From: ykiko Date: Sun, 28 Dec 2025 19:12:41 +0800 Subject: [PATCH 6/7] fix suggest mode --- .github/workflows/check-format.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check-format.yml b/.github/workflows/check-format.yml index 971026640..d12ab7e9e 100644 --- a/.github/workflows/check-format.yml +++ b/.github/workflows/check-format.yml @@ -44,3 +44,4 @@ jobs: with: tool_name: "fmt" fail_level: any + filter_mode: nofilter From 14cccbcdc183b991e24d505771934c3a4c9f6147 Mon Sep 17 00:00:00 2001 From: ykiko Date: Sun, 28 Dec 2025 19:17:07 +0800 Subject: [PATCH 7/7] fix foramt error --- pixi.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pixi.toml b/pixi.toml index 3ce6f18fd..e9120171e 100644 --- a/pixi.toml +++ b/pixi.toml @@ -11,7 +11,6 @@ license-file = "LICENSE" readme = "README.md" documentation = "https://clice.io" repository = "https://github.com/clice-io/clice" - channels = ["conda-forge"] platforms = ["win-64", "linux-64", "osx-arm64"]