use wdl_ast::Span;
use crate::DiagnosticsConfig;
use crate::Document;
use crate::diagnostics;
use crate::document::ScopeRef;
use crate::types::v1::EvaluationContext;
mod common;
mod completions;
mod document_symbol;
mod find_all_references;
mod goto_definition;
mod hover;
mod inlay_hints;
mod rename;
mod semantic_tokens;
mod signature_help;
pub(crate) mod snippets;
mod workspace_symbol;
pub use completions::*;
pub use document_symbol::*;
pub use find_all_references::*;
pub use goto_definition::*;
pub use hover::*;
pub use inlay_hints::*;
pub use rename::*;
pub use semantic_tokens::*;
pub use signature_help::*;
pub use workspace_symbol::*;
#[derive(Debug)]
pub struct TypeEvalContext<'a> {
scope: ScopeRef<'a>,
document: &'a Document,
}
impl EvaluationContext for TypeEvalContext<'_> {
fn version(&self) -> wdl_ast::SupportedVersion {
self.document
.version()
.expect("document should have a version")
}
fn resolve_name(&self, name: &str, _: Span) -> Option<crate::types::Type> {
if let Some(var) = self.scope.lookup(name).map(|n| n.ty().clone()) {
return Some(var);
}
if let Some(ty) = self.document.get_custom_type(name) {
return Some(
ty.type_name_ref()
.expect("type name ref to be created from custom type"),
);
}
None
}
fn resolve_type_name(
&mut self,
name: &str,
span: Span,
) -> std::result::Result<crate::types::Type, wdl_ast::Diagnostic> {
if let Some(s) = self.document.struct_by_name(name)
&& let Some(ty) = s.ty()
{
return Ok(ty.clone());
}
if let Some(e) = self.document.enum_by_name(name)
&& let Some(ty) = e.ty()
{
return Ok(ty.clone());
}
Err(diagnostics::unknown_type(name, span))
}
fn task(&self) -> Option<&crate::document::Task> {
None
}
fn diagnostics_config(&self) -> DiagnosticsConfig {
DiagnosticsConfig::default()
}
fn add_diagnostic(&mut self, _: wdl_ast::Diagnostic) {}
}