1pub mod relations;
2
3pub use relations::SvelteGraphBuilder;
4
5use sqry_core::ast::Scope;
6use sqry_core::plugin::{
7 LanguageMetadata, LanguagePlugin, SafeParser,
8 error::{ParseError, ScopeError},
9};
10use std::path::Path;
11use tree_sitter::Tree;
12
13pub struct SveltePlugin {
15 graph_builder: SvelteGraphBuilder,
16}
17
18impl SveltePlugin {
19 #[must_use]
21 pub fn new() -> Self {
22 Self {
23 graph_builder: SvelteGraphBuilder::default(),
24 }
25 }
26}
27
28impl Default for SveltePlugin {
29 fn default() -> Self {
30 Self::new()
31 }
32}
33
34impl LanguagePlugin for SveltePlugin {
35 fn metadata(&self) -> LanguageMetadata {
36 LanguageMetadata {
37 id: "svelte",
38 name: "Svelte",
39 version: env!("CARGO_PKG_VERSION"),
40 author: "Verivus Pty Ltd",
41 description: "Svelte.js Single-File Component support for sqry",
42 tree_sitter_version: "0.25",
43 }
44 }
45
46 fn extensions(&self) -> &'static [&'static str] {
47 &["svelte"]
48 }
49
50 fn language(&self) -> tree_sitter::Language {
51 tree_sitter_svelte_sqry::language()
52 }
53
54 fn parse_ast(&self, content: &[u8]) -> Result<Tree, ParseError> {
55 let parser = SafeParser::with_defaults();
56 parser.parse(&self.language(), content, None)
57 }
58
59 fn extract_scopes(
60 &self,
61 _tree: &Tree,
62 _content: &[u8],
63 _file_path: &Path,
64 ) -> Result<Vec<Scope>, ScopeError> {
65 Ok(Vec::new())
66 }
67
68 fn graph_builder(&self) -> Option<&dyn sqry_core::graph::GraphBuilder> {
69 Some(&self.graph_builder)
70 }
71}
72
73#[cfg(test)]
74mod tests {
75 use super::*;
76
77 #[test]
78 fn test_plugin_metadata() {
79 let plugin = SveltePlugin::default();
80 let metadata = plugin.metadata();
81 assert_eq!(metadata.id, "svelte");
82 assert_eq!(metadata.name, "Svelte");
83 }
84
85 #[test]
86 fn test_extensions() {
87 let plugin = SveltePlugin::default();
88 assert_eq!(plugin.extensions(), &["svelte"]);
89 }
90
91 #[test]
92 fn test_can_parse() {
93 let plugin = SveltePlugin::default();
94 let content = b"<template><div>Hello</div></template>";
95 let tree = plugin.parse_ast(content);
96 assert!(tree.is_ok());
97 }
98}