From a96d4649122d680a1f0f45533a557df09496edcb Mon Sep 17 00:00:00 2001 From: Emanuele Stoppa Date: Fri, 21 Jun 2024 08:47:40 +0100 Subject: [PATCH] chore(core): implement `pull_diagnostics` for graphql --- .../src/file_handlers/graphql.rs | 13 +++++++-- crates/biome_service/src/file_handlers/mod.rs | 10 +++---- crates/biome_service/tests/workspace.rs | 29 +++++++++++++++++++ 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/crates/biome_service/src/file_handlers/graphql.rs b/crates/biome_service/src/file_handlers/graphql.rs index d1c82f4327ad..c4af8f46ef39 100644 --- a/crates/biome_service/src/file_handlers/graphql.rs +++ b/crates/biome_service/src/file_handlers/graphql.rs @@ -1,4 +1,4 @@ -use super::{DocumentFileSource, ExtensionHandler, ParseResult}; +use super::{DocumentFileSource, ExtensionHandler, LintParams, LintResults, ParseResult}; use crate::file_handlers::DebugCapabilities; use crate::file_handlers::{ AnalyzerCapabilities, Capabilities, FormatterCapabilities, ParserCapabilities, @@ -66,7 +66,7 @@ impl ExtensionHandler for GraphqlFileHandler { debug_formatter_ir: None, }, analyzer: AnalyzerCapabilities { - lint: None, + lint: Some(lint), code_actions: None, rename: None, fix_all: None, @@ -110,3 +110,12 @@ fn debug_syntax_tree(_rome_path: &BiomePath, parse: AnyParse) -> GetSyntaxTreeRe ast: format!("{tree:#?}"), } } + +fn lint(params: LintParams) -> LintResults { + let diagnostics = params.parse.into_diagnostics(); + LintResults { + errors: diagnostics.len(), + diagnostics, + skipped_diagnostics: 0, + } +} diff --git a/crates/biome_service/src/file_handlers/mod.rs b/crates/biome_service/src/file_handlers/mod.rs index b18ac63ad81a..6452a7ca2160 100644 --- a/crates/biome_service/src/file_handlers/mod.rs +++ b/crates/biome_service/src/file_handlers/mod.rs @@ -96,7 +96,7 @@ impl DocumentFileSource { if let Ok(file_source) = CssFileSource::try_from_well_known(file_name) { return Ok(file_source.into()); } - if cfg!(feature = "graphql") { + if cfg!(feature = "graphql") || cfg!(debug_assertions) { if let Ok(file_source) = GraphqlFileSource::try_from_well_known(file_name) { return Ok(file_source.into()); } @@ -120,7 +120,7 @@ impl DocumentFileSource { if let Ok(file_source) = CssFileSource::try_from_extension(extension) { return Ok(file_source.into()); } - if cfg!(feature = "graphql") { + if cfg!(feature = "graphql") || cfg!(debug_assertions) { if let Ok(file_source) = GraphqlFileSource::try_from_extension(extension) { return Ok(file_source.into()); } @@ -147,7 +147,7 @@ impl DocumentFileSource { if let Ok(file_source) = CssFileSource::try_from_language_id(language_id) { return Ok(file_source.into()); } - if cfg!(feature = "graphql") { + if cfg!(feature = "graphql") || cfg!(debug_assertions) { if let Ok(file_source) = GraphqlFileSource::try_from_language_id(language_id) { return Ok(file_source.into()); } @@ -297,9 +297,7 @@ impl DocumentFileSource { EmbeddingKind::None => true, }, DocumentFileSource::Json(_) | DocumentFileSource::Css(_) => true, - DocumentFileSource::Graphql(_) => { - cfg!(feature = "graphql") - } + DocumentFileSource::Graphql(_) => cfg!(feature = "graphql") || cfg!(debug_assertions), DocumentFileSource::Unknown => false, } } diff --git a/crates/biome_service/tests/workspace.rs b/crates/biome_service/tests/workspace.rs index 7250cb393dc8..57d5a56b4dcf 100644 --- a/crates/biome_service/tests/workspace.rs +++ b/crates/biome_service/tests/workspace.rs @@ -173,4 +173,33 @@ mod test { .format_file() .is_ok()); } + + #[test] + fn correctly_parses_graphql_files() { + let workspace = create_server(); + + let graphql_file = FileGuard::open( + workspace.as_ref(), + OpenFileParams { + path: BiomePath::new("file.graphql"), + content: r#"type Query { + me: User +} + +type User { + id: ID + name: String +}"# + .into(), + version: 0, + document_file_source: None, + }, + ) + .unwrap(); + let result = graphql_file.get_syntax_tree(); + assert!(result.is_ok()); + let syntax = result.unwrap().ast; + + assert!(syntax.starts_with("GraphqlRoot")) + } }