This PR adds comprehensive documentation for the Neovim Tinymist plugin,
establishing it as the canonical implementation of a Tinymist editor
language client.
## Changes Made
### Added `editors/neovim/Specification.md`
The specification was a mess, so I the reviewer deleted it.
### Enhanced `editors/neovim/CONTRIBUTING.md`
Expanded the contributing guide to document:
- **Canonical Implementation Status**: Establishes this as the
heavily-documented reference implementation for other editors
- **Bootstrap Script Commands**:
- `./bootstrap.sh editor` - Interactive editing experience in Docker
- `./bootstrap.sh test` - Headless test execution
- `./bootstrap.sh bash` - Development shell access
- **Test Suite Structure**: Overview of all spec files and their testing
purposes
- **Contribution Patterns**: Guidelines for maintaining the reference
implementation
### Updated `.github/copilot-instructions.md`
Added guidance for working with editor integrations:
- **Repository Structure**: Notes the Neovim plugin as canonical
implementation with documentation links
- **Editor Integration Guidelines**: New section specifically for
referencing Neovim patterns
- **Development Workflow**: References to bootstrap commands and
documentation
## Why This Matters
The Neovim plugin now serves as the **canonical implementation** that
other editor integrations can reference for:
- LSP client setup patterns and configuration handling
- Event subscription mechanisms for development events
- Project resolution modes (singleFile vs lockDatabase)
- Export functionality patterns (onSave, onType, never)
- Comprehensive test coverage examples
This documentation enables maintainers and contributors to understand
the complete scope of the Neovim integration and provides a reference
for implementing similar functionality in other editors.
Fixes#2081.
<!-- START COPILOT CODING AGENT TIPS -->
---
✨ Let Copilot coding agent [set things up for
you](https://github.com/Myriad-Dreamin/tinymist/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Myriad-Dreamin <35292584+Myriad-Dreamin@users.noreply.github.com>
Co-authored-by: Myriad-Dreamin <camiyoru@gmail.com>
Adds comprehensive instructions for AI assistants (Claude/Copilot) to
work with the tinymist localization (l10n) system. The new
`.github/copilot-instructions-l10n.md` file provides detailed guidance
on both phases of the localization process:
## Marking and Extracting Messages
**Rust Backend (`crates/`):**
```rust
// Simple localized message
let message = tinymist_l10n::t!("error.file-not-found", "File not found");
// With parameters
let message = tinymist_l10n::t!(
"error.invalid-config",
"Invalid configuration: {key}",
key = config_key
);
```
**TypeScript VSCode Extension (`editors/vscode/`):**
```typescript
import { l10nMsg } from "../l10n";
// Simple message
const message = l10nMsg("Export as PDF");
// With parameters
const message = l10nMsg("Processing {count} files", { count: fileCount });
```
After adding localized messages, run `yarn build:l10n` to extract them
to TOML files.
## Translating Messages
The system uses TOML format designed for easy LLM modification:
```toml
[export.pdf.success]
en = "PDF exported successfully"
zh = "PDF 导出成功"
fr = "PDF exporté avec succès"
```
## Key Features
- **Complete workflow examples** for both Rust and TypeScript
- **Hierarchical key naming conventions** (e.g.,
`component.category.action`)
- **Translation guidelines** with parameter preservation
- **Best practices** for when to localize vs. when not to
- **Troubleshooting section** for common issues
- **File structure reference** showing the relationship between source
files and locale files
The instructions enable AI assistants to properly add new localizable
strings, update existing translations, and maintain the multilingual
support across the entire tinymist ecosystem.
Fixes#2075.
<!-- START COPILOT CODING AGENT TIPS -->
---
💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Myriad-Dreamin <35292584+Myriad-Dreamin@users.noreply.github.com>
This PR fixes the release script to remove the `tinymist-analysis` crate
from the release process.
This PR also fixes the `crityp` crate to include the `system` feature in
the `cli` feature.
The GitHub Action builds for Alpine containers (`alpine-{x64,arm64}`)
were producing warning messages that cluttered the build logs:
```
warning: tinymist-core@0.13.18: not within a suitable 'git' worktree!
warning: tinymist-core@0.13.18: VERGEN_GIT_DESCRIBE set to default
warning: tinymist-core@0.13.18: VERGEN_GIT_SHA set to default
```
These warnings occurred because the vergen crate was attempting to
access git repository information in containerized environments where
the full git history wasn't available due to shallow cloning.
**Root cause:** The Alpine workflow was using `actions/checkout@v4` with
default settings, which performs a shallow clone that doesn't include
the full git history that vergen needs for `git_describe` functionality.
**Solution:** Added `fetch-depth: 0` to the checkout step in the Alpine
workflow to ensure the full git history is available during builds. Git
is already properly installed in the Alpine environment via `apk add
--no-cache git`.
This approach maintains consistent behavior across all build
environments while eliminating the warnings in Alpine container builds.
The `tinymist --version` command continues to show proper git
information when available.
Fixes#1983.
<!-- START COPILOT CODING AGENT TIPS -->
---
💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Myriad-Dreamin <35292584+Myriad-Dreamin@users.noreply.github.com>
Co-authored-by: Myriad-Dreamin <camiyoru@gmail.com>
+ use `GITHUB_TOKEN` to checkout tinymist in `release-nightly.yml`.
Therefore, GitHub Actions should be granted write permission.
+ tag directives must start from the line start.
+ use the same bot name and email in actions.
This PR introduces multiple GitHub Actions to automate the release
procedure. In brief, it contains:
- **For nightly releases**: A fully automated GitHub Action that updates
dependencies (including dependencies of typstyle, typst.ts, and
typst-ansi-hl), releases nightly RC (aka canary version in the action
script) and nightly builds, along with its helper script (which can also
be useful for manually updating versions).
- **For stable releases**: Two GitHub Actions, one that detects newly
opened PRs containing tagging directives (`+Tag vx.y.z-rcw`) and leaves
comments, and another that detects merged tagging PRs and performs the
actual tagging.
Examples:
- Nightly release:
4708018995
- Stable release: ParaN3xus/tinymist#1, ParaN3xus/tinymist#2
Extra work needed to merge this PR:
- [ ] Remove all `nightly/*` branches and create `nightly` branch
- [ ] Add `NIGHTLY_REPO_TOKEN` secret to this repo
---------
Co-authored-by: Myriad-Dreamin <camiyoru@gmail.com>
Since this PR, CI runs VS Code tasks exact after built binaries and
before `dist host`. This is to ensure that the vscode artifacts are
available when undraft the releases.
* feat: publish tinymist to crates.io
* fix: first attempt is failed
* fix: first attempt is failed
* fix: the block is assumed to be used in block expressions