From 58719af5947a1877707cc52999094f5f83b7e470 Mon Sep 17 00:00:00 2001 From: ensu Date: Fri, 26 Jun 2026 09:44:59 +0800 Subject: [PATCH 1/2] Add MDX language support --- extensions/zed/extension.toml | 1 + src/document/language.rs | 1 + src/parser/tree_sitter/mod.rs | 66 ++++++++++++++++++++++++++--------- 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/extensions/zed/extension.toml b/extensions/zed/extension.toml index 59b93dd..03770b2 100644 --- a/extensions/zed/extension.toml +++ b/extensions/zed/extension.toml @@ -54,6 +54,7 @@ languages = [ "Luau", "Makefile", "Markdown", + "MDX", "Nim", "Nix", "OCaml", diff --git a/src/document/language.rs b/src/document/language.rs index 9a33ab9..65a6278 100644 --- a/src/document/language.rs +++ b/src/document/language.rs @@ -55,6 +55,7 @@ pub enum Language { luau, makefile, markdown, + mdx, nim, nix, ocaml, diff --git a/src/parser/tree_sitter/mod.rs b/src/parser/tree_sitter/mod.rs index da8d815..a4ab7a1 100644 --- a/src/parser/tree_sitter/mod.rs +++ b/src/parser/tree_sitter/mod.rs @@ -94,7 +94,7 @@ pub mod ts_languages { Language::typescript => Some(get_ts_language()), Language::python => Some(get_python_language()), Language::rust => Some(get_rust_language()), - Language::markdown => Some(get_md_language()), + Language::markdown | Language::mdx => Some(get_md_language()), Language::html => Some(get_html_language()), Language::c => Some(get_c_language()), Language::c_plus_plus => Some(get_cpp_language()), @@ -170,7 +170,9 @@ pub fn extract_strings(document: &Document) -> PathServerResult ts_markdown::extract_strings(&document.text, &tree.root_node())?, + Language::markdown | Language::mdx => { + ts_markdown::extract_strings(&document.text, &tree.root_node())? + } Language::html => { ts_html::extract_strings(&document.text, &tree.root_node(), &document.language) } @@ -221,22 +223,23 @@ mod tests { is_last: bool, language: &Language, ) { - let inline_tree = if language == &Language::markdown && node.kind() == "inline" { - let mut inline_parser = tree_sitter::Parser::new(); - inline_parser - .set_language(&ts_languages::get_md_inline_language()) - .expect("failed to set inline language"); - inline_parser - .set_included_ranges(&vec![node.range()]) - .expect("failed to set included ranges"); - Some( + let inline_tree = + if matches!(language, Language::markdown | Language::mdx) && node.kind() == "inline" { + let mut inline_parser = tree_sitter::Parser::new(); inline_parser - .parse(source, None) - .expect("failed to parse inline source"), - ) - } else { - None - }; + .set_language(&ts_languages::get_md_inline_language()) + .expect("failed to set inline language"); + inline_parser + .set_included_ranges(&vec![node.range()]) + .expect("failed to set included ranges"); + Some( + inline_parser + .parse(source, None) + .expect("failed to parse inline source"), + ) + } else { + None + }; let node = if let Some(inline_tree) = &inline_tree { &inline_tree.root_node() } else { @@ -490,6 +493,35 @@ Project Timer is a lightweight VS Code extension that tracks the time you spend ); } + #[test] + fn test_mdx_extract_strings_with_markdown_parser() { + let mdx = r#" +import Demo from './components/Demo' + +![Hero](./public/hero.png) + + + "#; + + assert!(tree_sitter_supported("mdx")); + + let doc = Document::new(mdx.to_string(), "mdx").expect("failed to create MDX document"); + let res = extract_strings(&doc).unwrap().unwrap(); + eprintln!("{:?}", res); + assert!( + res.iter().any(|c| c.content == "./components/Demo"), + "missing path in MDX import" + ); + assert!( + res.iter().any(|c| c.content == "./public/hero.png"), + "missing path in MDX markdown link" + ); + assert!( + res.iter().any(|c| c.content == "./assets/demo.png"), + "missing path in MDX JSX attribute" + ); + } + #[test] fn test_html_extract_string() { let simple = r#" "#; From f181711f57c97e70344aa7c214f9544134bdc6f8 Mon Sep 17 00:00:00 2001 From: kunlinglio <142668432+kunlinglio@users.noreply.github.com> Date: Sat, 27 Jun 2026 19:30:27 +0800 Subject: [PATCH 2/2] Update changelog for MDX support --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab9fc8a..c034d80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ All notable changes to the Path Server will be documented in this file. +## Unreleased + +### Added +- **Core**: Added MDX language support. ([#43](https://github.com/kunlinglio/path-server/pull/43)) + ## [1.3.1] - 2026-05-29 Path Server is now published to Zed extensions! You can now install it via `zed: install extension`.