use super::*;
use serde::{de::DeserializeOwned, Serialize};
pub trait Request {
type Params: DeserializeOwned + Serialize + Send + Sync + 'static;
type Result: DeserializeOwned + Serialize + Send + Sync + 'static;
const METHOD: &'static str;
}
#[macro_export]
macro_rules! lsp_request {
("initialize") => {
$crate::request::Initialize
};
("shutdown") => {
$crate::request::Shutdown
};
("window/showMessageRequest") => {
$crate::request::ShowMessageRequest
};
("client/registerCapability") => {
$crate::request::RegisterCapability
};
("client/unregisterCapability") => {
$crate::request::UnregisterCapability
};
("workspace/symbol") => {
$crate::request::WorkspaceSymbolRequest
};
("workspaceSymbol/resolve") => {
$crate::request::WorkspaceSymbolResolve
};
("workspace/executeCommand") => {
$crate::request::ExecuteCommand
};
("textDocument/willSaveWaitUntil") => {
$crate::request::WillSaveWaitUntil
};
("textDocument/completion") => {
$crate::request::Completion
};
("completionItem/resolve") => {
$crate::request::ResolveCompletionItem
};
("textDocument/hover") => {
$crate::request::HoverRequest
};
("textDocument/signatureHelp") => {
$crate::request::SignatureHelpRequest
};
("textDocument/declaration") => {
$crate::request::GotoDeclaration
};
("textDocument/definition") => {
$crate::request::GotoDefinition
};
("textDocument/references") => {
$crate::request::References
};
("textDocument/documentHighlight") => {
$crate::request::DocumentHighlightRequest
};
("textDocument/documentSymbol") => {
$crate::request::DocumentSymbolRequest
};
("textDocument/codeAction") => {
$crate::request::CodeActionRequest
};
("textDocument/codeLens") => {
$crate::request::CodeLensRequest
};
("codeLens/resolve") => {
$crate::request::CodeLensResolve
};
("textDocument/documentLink") => {
$crate::request::DocumentLinkRequest
};
("documentLink/resolve") => {
$crate::request::DocumentLinkResolve
};
("workspace/applyEdit") => {
$crate::request::ApplyWorkspaceEdit
};
("textDocument/rangeFormatting") => {
$crate::request::RangeFormatting
};
("textDocument/onTypeFormatting") => {
$crate::request::OnTypeFormatting
};
("textDocument/formatting") => {
$crate::request::Formatting
};
("textDocument/rename") => {
$crate::request::Rename
};
("textDocument/documentColor") => {
$crate::request::DocumentColor
};
("textDocument/colorPresentation") => {
$crate::request::ColorPresentationRequest
};
("textDocument/foldingRange") => {
$crate::request::FoldingRangeRequest
};
("textDocument/prepareRename") => {
$crate::request::PrepareRenameRequest
};
("textDocument/implementation") => {
$crate::request::GotoImplementation
};
("textDocument/typeDefinition") => {
$crate::request::GotoTypeDefinition
};
("textDocument/selectionRange") => {
$crate::request::SelectionRangeRequest
};
("workspace/workspaceFolders") => {
$crate::request::WorkspaceFoldersRequest
};
("workspace/configuration") => {
$crate::request::WorkspaceConfiguration
};
("window/workDoneProgress/create") => {
$crate::request::WorkDoneProgressCreate
};
("callHierarchy/incomingCalls") => {
$crate::request::CallHierarchyIncomingCalls
};
("callHierarchy/outgoingCalls") => {
$crate::request::CallHierarchyOutgoingCalls
};
("textDocument/moniker") => {
$crate::request::MonikerRequest
};
("textDocument/linkedEditingRange") => {
$crate::request::LinkedEditingRange
};
("textDocument/prepareCallHierarchy") => {
$crate::request::CallHierarchyPrepare
};
("textDocument/prepareTypeHierarchy") => {
$crate::request::TypeHierarchyPrepare
};
("textDocument/semanticTokens/full") => {
$crate::request::SemanticTokensFullRequest
};
("textDocument/semanticTokens/full/delta") => {
$crate::request::SemanticTokensFullDeltaRequest
};
("textDocument/semanticTokens/range") => {
$crate::request::SemanticTokensRangeRequest
};
("textDocument/inlayHint") => {
$crate::request::InlayHintRequest
};
("textDocument/inlineValue") => {
$crate::request::InlineValueRequest
};
("textDocument/diagnostic") => {
$crate::request::DocumentDiagnosticRequest
};
("workspace/diagnostic") => {
$crate::request::WorkspaceDiagnosticRequest
};
("workspace/diagnostic/refresh") => {
$crate::request::WorkspaceDiagnosticRefresh
};
("typeHierarchy/supertypes") => {
$crate::request::TypeHierarchySupertypes
};
("typeHierarchy/subtypes") => {
$crate::request::TypeHierarchySubtypes
};
("workspace/willCreateFiles") => {
$crate::request::WillCreateFiles
};
("workspace/willRenameFiles") => {
$crate::request::WillRenameFiles
};
("workspace/willDeleteFiles") => {
$crate::request::WillDeleteFiles
};
("workspace/semanticTokens/refresh") => {
$crate::request::SemanticTokensRefresh
};
("workspace/codeLens/refresh") => {
$crate::request::CodeLensRefresh
};
("workspace/inlayHint/refresh") => {
$crate::request::InlayHintRefreshRequest
};
("workspace/inlineValue/refresh") => {
$crate::request::InlineValueRefreshRequest
};
("codeAction/resolve") => {
$crate::request::CodeActionResolveRequest
};
("inlayHint/resolve") => {
$crate::request::InlayHintResolveRequest
};
("window/showDocument") => {
$crate::request::ShowDocument
};
}
#[derive(Debug)]
pub enum Initialize {}
impl Request for Initialize {
type Params = InitializeParams;
type Result = InitializeResult;
const METHOD: &'static str = "initialize";
}
#[derive(Debug)]
pub enum Shutdown {}
impl Request for Shutdown {
type Params = ();
type Result = ();
const METHOD: &'static str = "shutdown";
}
#[derive(Debug)]
pub enum ShowMessageRequest {}
impl Request for ShowMessageRequest {
type Params = ShowMessageRequestParams;
type Result = Option<MessageActionItem>;
const METHOD: &'static str = "window/showMessageRequest";
}
#[derive(Debug)]
pub enum RegisterCapability {}
impl Request for RegisterCapability {
type Params = RegistrationParams;
type Result = ();
const METHOD: &'static str = "client/registerCapability";
}
#[derive(Debug)]
pub enum UnregisterCapability {}
impl Request for UnregisterCapability {
type Params = UnregistrationParams;
type Result = ();
const METHOD: &'static str = "client/unregisterCapability";
}
#[derive(Debug)]
pub enum Completion {}
impl Request for Completion {
type Params = CompletionParams;
type Result = Option<CompletionResponse>;
const METHOD: &'static str = "textDocument/completion";
}
#[derive(Debug)]
pub enum ResolveCompletionItem {}
impl Request for ResolveCompletionItem {
type Params = CompletionItem;
type Result = CompletionItem;
const METHOD: &'static str = "completionItem/resolve";
}
#[derive(Debug)]
pub enum HoverRequest {}
impl Request for HoverRequest {
type Params = HoverParams;
type Result = Option<Hover>;
const METHOD: &'static str = "textDocument/hover";
}
#[derive(Debug)]
pub enum SignatureHelpRequest {}
impl Request for SignatureHelpRequest {
type Params = SignatureHelpParams;
type Result = Option<SignatureHelp>;
const METHOD: &'static str = "textDocument/signatureHelp";
}
#[derive(Debug)]
pub enum GotoDeclaration {}
pub type GotoDeclarationParams = GotoDefinitionParams;
pub type GotoDeclarationResponse = GotoDefinitionResponse;
impl Request for GotoDeclaration {
type Params = GotoDeclarationParams;
type Result = Option<GotoDeclarationResponse>;
const METHOD: &'static str = "textDocument/declaration";
}
#[derive(Debug)]
pub enum GotoDefinition {}
impl Request for GotoDefinition {
type Params = GotoDefinitionParams;
type Result = Option<GotoDefinitionResponse>;
const METHOD: &'static str = "textDocument/definition";
}
#[derive(Debug)]
pub enum References {}
impl Request for References {
type Params = ReferenceParams;
type Result = Option<Vec<Location>>;
const METHOD: &'static str = "textDocument/references";
}
#[derive(Debug)]
pub enum GotoTypeDefinition {}
pub type GotoTypeDefinitionParams = GotoDefinitionParams;
pub type GotoTypeDefinitionResponse = GotoDefinitionResponse;
impl Request for GotoTypeDefinition {
type Params = GotoTypeDefinitionParams;
type Result = Option<GotoTypeDefinitionResponse>;
const METHOD: &'static str = "textDocument/typeDefinition";
}
#[derive(Debug)]
pub enum GotoImplementation {}
pub type GotoImplementationParams = GotoTypeDefinitionParams;
pub type GotoImplementationResponse = GotoDefinitionResponse;
impl Request for GotoImplementation {
type Params = GotoImplementationParams;
type Result = Option<GotoImplementationResponse>;
const METHOD: &'static str = "textDocument/implementation";
}
#[derive(Debug)]
pub enum DocumentHighlightRequest {}
impl Request for DocumentHighlightRequest {
type Params = DocumentHighlightParams;
type Result = Option<Vec<DocumentHighlight>>;
const METHOD: &'static str = "textDocument/documentHighlight";
}
#[derive(Debug)]
pub enum DocumentSymbolRequest {}
impl Request for DocumentSymbolRequest {
type Params = DocumentSymbolParams;
type Result = Option<DocumentSymbolResponse>;
const METHOD: &'static str = "textDocument/documentSymbol";
}
#[derive(Debug)]
pub enum WorkspaceSymbolRequest {}
impl Request for WorkspaceSymbolRequest {
type Params = WorkspaceSymbolParams;
type Result = Option<WorkspaceSymbolResponse>;
const METHOD: &'static str = "workspace/symbol";
}
#[derive(Debug)]
pub enum WorkspaceSymbolResolve {}
impl Request for WorkspaceSymbolResolve {
type Params = WorkspaceSymbol;
type Result = WorkspaceSymbol;
const METHOD: &'static str = "workspaceSymbol/resolve";
}
#[derive(Debug)]
pub enum ExecuteCommand {}
impl Request for ExecuteCommand {
type Params = ExecuteCommandParams;
type Result = Option<Value>;
const METHOD: &'static str = "workspace/executeCommand";
}
#[derive(Debug)]
pub enum WillSaveWaitUntil {}
impl Request for WillSaveWaitUntil {
type Params = WillSaveTextDocumentParams;
type Result = Option<Vec<TextEdit>>;
const METHOD: &'static str = "textDocument/willSaveWaitUntil";
}
#[derive(Debug)]
pub enum ApplyWorkspaceEdit {}
impl Request for ApplyWorkspaceEdit {
type Params = ApplyWorkspaceEditParams;
type Result = ApplyWorkspaceEditResponse;
const METHOD: &'static str = "workspace/applyEdit";
}
#[derive(Debug)]
pub enum WorkspaceConfiguration {}
impl Request for WorkspaceConfiguration {
type Params = ConfigurationParams;
type Result = Vec<Value>;
const METHOD: &'static str = "workspace/configuration";
}
#[derive(Debug)]
pub enum CodeActionRequest {}
impl Request for CodeActionRequest {
type Params = CodeActionParams;
type Result = Option<CodeActionResponse>;
const METHOD: &'static str = "textDocument/codeAction";
}
#[derive(Debug)]
pub enum CodeActionResolveRequest {}
impl Request for CodeActionResolveRequest {
type Params = CodeAction;
type Result = CodeAction;
const METHOD: &'static str = "codeAction/resolve";
}
#[derive(Debug)]
pub enum CodeLensRequest {}
impl Request for CodeLensRequest {
type Params = CodeLensParams;
type Result = Option<Vec<CodeLens>>;
const METHOD: &'static str = "textDocument/codeLens";
}
#[derive(Debug)]
pub enum CodeLensResolve {}
impl Request for CodeLensResolve {
type Params = CodeLens;
type Result = CodeLens;
const METHOD: &'static str = "codeLens/resolve";
}
#[derive(Debug)]
pub enum DocumentLinkRequest {}
impl Request for DocumentLinkRequest {
type Params = DocumentLinkParams;
type Result = Option<Vec<DocumentLink>>;
const METHOD: &'static str = "textDocument/documentLink";
}
#[derive(Debug)]
pub enum DocumentLinkResolve {}
impl Request for DocumentLinkResolve {
type Params = DocumentLink;
type Result = DocumentLink;
const METHOD: &'static str = "documentLink/resolve";
}
#[derive(Debug)]
pub enum Formatting {}
impl Request for Formatting {
type Params = DocumentFormattingParams;
type Result = Option<Vec<TextEdit>>;
const METHOD: &'static str = "textDocument/formatting";
}
#[derive(Debug)]
pub enum RangeFormatting {}
impl Request for RangeFormatting {
type Params = DocumentRangeFormattingParams;
type Result = Option<Vec<TextEdit>>;
const METHOD: &'static str = "textDocument/rangeFormatting";
}
#[derive(Debug)]
pub enum OnTypeFormatting {}
impl Request for OnTypeFormatting {
type Params = DocumentOnTypeFormattingParams;
type Result = Option<Vec<TextEdit>>;
const METHOD: &'static str = "textDocument/onTypeFormatting";
}
#[derive(Debug)]
pub enum LinkedEditingRange {}
impl Request for LinkedEditingRange {
type Params = LinkedEditingRangeParams;
type Result = Option<LinkedEditingRanges>;
const METHOD: &'static str = "textDocument/linkedEditingRange";
}
#[derive(Debug)]
pub enum Rename {}
impl Request for Rename {
type Params = RenameParams;
type Result = Option<WorkspaceEdit>;
const METHOD: &'static str = "textDocument/rename";
}
#[derive(Debug)]
pub enum DocumentColor {}
impl Request for DocumentColor {
type Params = DocumentColorParams;
type Result = Vec<ColorInformation>;
const METHOD: &'static str = "textDocument/documentColor";
}
#[derive(Debug)]
pub enum ColorPresentationRequest {}
impl Request for ColorPresentationRequest {
type Params = ColorPresentationParams;
type Result = Vec<ColorPresentation>;
const METHOD: &'static str = "textDocument/colorPresentation";
}
#[derive(Debug)]
pub enum FoldingRangeRequest {}
impl Request for FoldingRangeRequest {
type Params = FoldingRangeParams;
type Result = Option<Vec<FoldingRange>>;
const METHOD: &'static str = "textDocument/foldingRange";
}
#[derive(Debug)]
pub enum PrepareRenameRequest {}
impl Request for PrepareRenameRequest {
type Params = TextDocumentPositionParams;
type Result = Option<PrepareRenameResponse>;
const METHOD: &'static str = "textDocument/prepareRename";
}
#[derive(Debug)]
#[cfg(feature = "proposed")]
pub enum InlineCompletionRequest {}
#[cfg(feature = "proposed")]
impl Request for InlineCompletionRequest {
type Params = InlineCompletionParams;
type Result = Option<InlineCompletionResponse>;
const METHOD: &'static str = "textDocument/inlineCompletion";
}
#[derive(Debug)]
pub enum WorkspaceFoldersRequest {}
impl Request for WorkspaceFoldersRequest {
type Params = ();
type Result = Option<Vec<WorkspaceFolder>>;
const METHOD: &'static str = "workspace/workspaceFolders";
}
#[derive(Debug)]
pub enum WorkDoneProgressCreate {}
impl Request for WorkDoneProgressCreate {
type Params = WorkDoneProgressCreateParams;
type Result = ();
const METHOD: &'static str = "window/workDoneProgress/create";
}
pub enum SelectionRangeRequest {}
impl Request for SelectionRangeRequest {
type Params = SelectionRangeParams;
type Result = Option<Vec<SelectionRange>>;
const METHOD: &'static str = "textDocument/selectionRange";
}
pub enum CallHierarchyPrepare {}
impl Request for CallHierarchyPrepare {
type Params = CallHierarchyPrepareParams;
type Result = Option<Vec<CallHierarchyItem>>;
const METHOD: &'static str = "textDocument/prepareCallHierarchy";
}
pub enum CallHierarchyIncomingCalls {}
impl Request for CallHierarchyIncomingCalls {
type Params = CallHierarchyIncomingCallsParams;
type Result = Option<Vec<CallHierarchyIncomingCall>>;
const METHOD: &'static str = "callHierarchy/incomingCalls";
}
pub enum CallHierarchyOutgoingCalls {}
impl Request for CallHierarchyOutgoingCalls {
type Params = CallHierarchyOutgoingCallsParams;
type Result = Option<Vec<CallHierarchyOutgoingCall>>;
const METHOD: &'static str = "callHierarchy/outgoingCalls";
}
pub enum SemanticTokensFullRequest {}
impl Request for SemanticTokensFullRequest {
type Params = SemanticTokensParams;
type Result = Option<SemanticTokensResult>;
const METHOD: &'static str = "textDocument/semanticTokens/full";
}
pub enum SemanticTokensFullDeltaRequest {}
impl Request for SemanticTokensFullDeltaRequest {
type Params = SemanticTokensDeltaParams;
type Result = Option<SemanticTokensFullDeltaResult>;
const METHOD: &'static str = "textDocument/semanticTokens/full/delta";
}
pub enum SemanticTokensRangeRequest {}
impl Request for SemanticTokensRangeRequest {
type Params = SemanticTokensRangeParams;
type Result = Option<SemanticTokensRangeResult>;
const METHOD: &'static str = "textDocument/semanticTokens/range";
}
pub enum SemanticTokensRefresh {}
impl Request for SemanticTokensRefresh {
type Params = ();
type Result = ();
const METHOD: &'static str = "workspace/semanticTokens/refresh";
}
pub enum CodeLensRefresh {}
impl Request for CodeLensRefresh {
type Params = ();
type Result = ();
const METHOD: &'static str = "workspace/codeLens/refresh";
}
pub enum WillCreateFiles {}
impl Request for WillCreateFiles {
type Params = CreateFilesParams;
type Result = Option<WorkspaceEdit>;
const METHOD: &'static str = "workspace/willCreateFiles";
}
pub enum WillRenameFiles {}
impl Request for WillRenameFiles {
type Params = RenameFilesParams;
type Result = Option<WorkspaceEdit>;
const METHOD: &'static str = "workspace/willRenameFiles";
}
pub enum WillDeleteFiles {}
impl Request for WillDeleteFiles {
type Params = DeleteFilesParams;
type Result = Option<WorkspaceEdit>;
const METHOD: &'static str = "workspace/willDeleteFiles";
}
pub enum ShowDocument {}
impl Request for ShowDocument {
type Params = ShowDocumentParams;
type Result = ShowDocumentResult;
const METHOD: &'static str = "window/showDocument";
}
pub enum MonikerRequest {}
impl Request for MonikerRequest {
type Params = MonikerParams;
type Result = Option<Vec<Moniker>>;
const METHOD: &'static str = "textDocument/moniker";
}
pub enum InlayHintRequest {}
impl Request for InlayHintRequest {
type Params = InlayHintParams;
type Result = Option<Vec<InlayHint>>;
const METHOD: &'static str = "textDocument/inlayHint";
}
pub enum InlayHintResolveRequest {}
impl Request for InlayHintResolveRequest {
type Params = InlayHint;
type Result = InlayHint;
const METHOD: &'static str = "inlayHint/resolve";
}
pub enum InlayHintRefreshRequest {}
impl Request for InlayHintRefreshRequest {
type Params = ();
type Result = ();
const METHOD: &'static str = "workspace/inlayHint/refresh";
}
pub enum InlineValueRequest {}
impl Request for InlineValueRequest {
type Params = InlineValueParams;
type Result = Option<Vec<InlineValue>>;
const METHOD: &'static str = "textDocument/inlineValue";
}
pub enum InlineValueRefreshRequest {}
impl Request for InlineValueRefreshRequest {
type Params = ();
type Result = ();
const METHOD: &'static str = "workspace/inlineValue/refresh";
}
#[derive(Debug)]
pub enum DocumentDiagnosticRequest {}
impl Request for DocumentDiagnosticRequest {
type Params = DocumentDiagnosticParams;
type Result = DocumentDiagnosticReportResult;
const METHOD: &'static str = "textDocument/diagnostic";
}
#[derive(Debug)]
pub enum WorkspaceDiagnosticRequest {}
impl Request for WorkspaceDiagnosticRequest {
type Params = WorkspaceDiagnosticParams;
const METHOD: &'static str = "workspace/diagnostic";
type Result = WorkspaceDiagnosticReportResult;
}
#[derive(Debug)]
pub enum WorkspaceDiagnosticRefresh {}
impl Request for WorkspaceDiagnosticRefresh {
type Params = ();
type Result = ();
const METHOD: &'static str = "workspace/diagnostic/refresh";
}
pub enum TypeHierarchyPrepare {}
impl Request for TypeHierarchyPrepare {
type Params = TypeHierarchyPrepareParams;
type Result = Option<Vec<TypeHierarchyItem>>;
const METHOD: &'static str = "textDocument/prepareTypeHierarchy";
}
pub enum TypeHierarchySupertypes {}
impl Request for TypeHierarchySupertypes {
type Params = TypeHierarchySupertypesParams;
type Result = Option<Vec<TypeHierarchyItem>>;
const METHOD: &'static str = "typeHierarchy/supertypes";
}
pub enum TypeHierarchySubtypes {}
impl Request for TypeHierarchySubtypes {
type Params = TypeHierarchySubtypesParams;
type Result = Option<Vec<TypeHierarchyItem>>;
const METHOD: &'static str = "typeHierarchy/subtypes";
}
#[cfg(test)]
mod test {
use super::*;
fn fake_call<R>()
where
R: Request,
R::Params: serde::Serialize,
R::Result: serde::de::DeserializeOwned,
{
}
macro_rules! check_macro {
($name:tt) => {
assert_eq!(<lsp_request!($name) as Request>::METHOD, $name);
fake_call::<lsp_request!($name)>();
};
}
#[test]
fn check_macro_definitions() {
check_macro!("initialize");
check_macro!("shutdown");
check_macro!("window/showDocument");
check_macro!("window/showMessageRequest");
check_macro!("window/workDoneProgress/create");
check_macro!("client/registerCapability");
check_macro!("client/unregisterCapability");
check_macro!("textDocument/willSaveWaitUntil");
check_macro!("textDocument/completion");
check_macro!("textDocument/hover");
check_macro!("textDocument/signatureHelp");
check_macro!("textDocument/declaration");
check_macro!("textDocument/definition");
check_macro!("textDocument/references");
check_macro!("textDocument/documentHighlight");
check_macro!("textDocument/documentSymbol");
check_macro!("textDocument/codeAction");
check_macro!("textDocument/codeLens");
check_macro!("textDocument/documentLink");
check_macro!("textDocument/rangeFormatting");
check_macro!("textDocument/onTypeFormatting");
check_macro!("textDocument/formatting");
check_macro!("textDocument/rename");
check_macro!("textDocument/documentColor");
check_macro!("textDocument/colorPresentation");
check_macro!("textDocument/foldingRange");
check_macro!("textDocument/prepareRename");
check_macro!("textDocument/implementation");
check_macro!("textDocument/selectionRange");
check_macro!("textDocument/typeDefinition");
check_macro!("textDocument/moniker");
check_macro!("textDocument/linkedEditingRange");
check_macro!("textDocument/prepareCallHierarchy");
check_macro!("textDocument/prepareTypeHierarchy");
check_macro!("textDocument/semanticTokens/full");
check_macro!("textDocument/semanticTokens/full/delta");
check_macro!("textDocument/semanticTokens/range");
check_macro!("textDocument/inlayHint");
check_macro!("textDocument/inlineValue");
check_macro!("textDocument/diagnostic");
check_macro!("workspace/applyEdit");
check_macro!("workspace/symbol");
check_macro!("workspace/executeCommand");
check_macro!("workspace/configuration");
check_macro!("workspace/diagnostic");
check_macro!("workspace/diagnostic/refresh");
check_macro!("workspace/willCreateFiles");
check_macro!("workspace/willRenameFiles");
check_macro!("workspace/willDeleteFiles");
check_macro!("workspace/workspaceFolders");
check_macro!("workspace/semanticTokens/refresh");
check_macro!("workspace/codeLens/refresh");
check_macro!("workspace/inlayHint/refresh");
check_macro!("workspace/inlineValue/refresh");
check_macro!("callHierarchy/incomingCalls");
check_macro!("callHierarchy/outgoingCalls");
check_macro!("codeAction/resolve");
check_macro!("codeLens/resolve");
check_macro!("completionItem/resolve");
check_macro!("documentLink/resolve");
check_macro!("inlayHint/resolve");
check_macro!("typeHierarchy/subtypes");
check_macro!("typeHierarchy/supertypes");
check_macro!("workspaceSymbol/resolve");
}
#[test]
#[cfg(feature = "proposed")]
fn check_proposed_macro_definitions() {}
}