use super::{MetadataObject, ResponseMode};
use crate::domain::model::{GeneratedStructuralFollowUp, ReferenceMatch};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
pub struct FindReferencesParams {
pub symbol: Option<String>,
pub repository_id: Option<String>,
pub path: Option<String>,
pub line: Option<usize>,
pub column: Option<usize>,
pub include_definition: Option<bool>,
pub include_follow_up_structural: Option<bool>,
pub limit: Option<usize>,
pub response_mode: Option<ResponseMode>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum NavigationMode {
Precise,
PrecisePartial,
HeuristicNoPrecise,
UnavailableNoPrecise,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum NavigationTargetSelectionStatus {
Resolved,
DisambiguationRequired,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct NavigationTargetSelectionSummary {
pub status: NavigationTargetSelectionStatus,
pub symbol_query: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub selected_stable_symbol_id: Option<String>,
pub candidate_count: usize,
pub same_rank_candidate_count: usize,
pub ambiguous_query: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub candidates: Vec<crate::domain::model::SymbolMatch>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct FindReferencesResponse {
pub total_matches: usize,
pub matches: Vec<ReferenceMatch>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result_handle: Option<String>,
pub mode: NavigationMode,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_selection: Option<NavigationTargetSelectionSummary>,
#[schemars(schema_with = "super::metadata_object_field_schema")]
pub metadata: Option<MetadataObject>,
pub note: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
pub struct GoToDefinitionParams {
pub symbol: Option<String>,
pub repository_id: Option<String>,
pub path: Option<String>,
pub line: Option<usize>,
pub column: Option<usize>,
pub include_follow_up_structural: Option<bool>,
pub limit: Option<usize>,
pub response_mode: Option<ResponseMode>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct NavigationLocation {
#[serde(skip_serializing_if = "Option::is_none")]
pub match_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stable_symbol_id: Option<String>,
pub symbol: String,
pub repository_id: String,
pub path: String,
pub line: usize,
pub column: usize,
pub kind: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub container: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub signature: Option<String>,
pub precision: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub follow_up_structural: Vec<GeneratedStructuralFollowUp>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct GoToDefinitionResponse {
pub matches: Vec<NavigationLocation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result_handle: Option<String>,
pub mode: NavigationMode,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_selection: Option<NavigationTargetSelectionSummary>,
#[schemars(schema_with = "super::metadata_object_field_schema")]
pub metadata: Option<MetadataObject>,
pub note: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
pub struct FindDeclarationsParams {
pub symbol: Option<String>,
pub repository_id: Option<String>,
pub path: Option<String>,
pub line: Option<usize>,
pub column: Option<usize>,
pub include_follow_up_structural: Option<bool>,
pub limit: Option<usize>,
pub response_mode: Option<ResponseMode>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct FindDeclarationsResponse {
pub matches: Vec<NavigationLocation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result_handle: Option<String>,
pub mode: NavigationMode,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_selection: Option<NavigationTargetSelectionSummary>,
#[schemars(schema_with = "super::metadata_object_field_schema")]
pub metadata: Option<MetadataObject>,
pub note: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
pub struct FindImplementationsParams {
pub symbol: Option<String>,
pub repository_id: Option<String>,
pub path: Option<String>,
pub line: Option<usize>,
pub column: Option<usize>,
pub include_follow_up_structural: Option<bool>,
pub limit: Option<usize>,
pub response_mode: Option<ResponseMode>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct ImplementationMatch {
#[serde(skip_serializing_if = "Option::is_none")]
pub match_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stable_symbol_id: Option<String>,
pub symbol: String,
pub kind: Option<String>,
pub repository_id: String,
pub path: String,
pub line: usize,
pub column: usize,
pub relation: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub container: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub signature: Option<String>,
pub precision: Option<String>,
pub fallback_reason: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub follow_up_structural: Vec<GeneratedStructuralFollowUp>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct FindImplementationsResponse {
pub matches: Vec<ImplementationMatch>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result_handle: Option<String>,
pub mode: NavigationMode,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_selection: Option<NavigationTargetSelectionSummary>,
#[schemars(schema_with = "super::metadata_object_field_schema")]
pub metadata: Option<MetadataObject>,
pub note: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
pub struct IncomingCallsParams {
pub symbol: Option<String>,
pub repository_id: Option<String>,
pub path: Option<String>,
pub line: Option<usize>,
pub column: Option<usize>,
pub include_follow_up_structural: Option<bool>,
pub limit: Option<usize>,
pub response_mode: Option<ResponseMode>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
pub struct OutgoingCallsParams {
pub symbol: Option<String>,
pub repository_id: Option<String>,
pub path: Option<String>,
pub line: Option<usize>,
pub column: Option<usize>,
pub include_follow_up_structural: Option<bool>,
pub limit: Option<usize>,
pub response_mode: Option<ResponseMode>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct CallHierarchyMatch {
#[serde(skip_serializing_if = "Option::is_none")]
pub match_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_stable_symbol_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_stable_symbol_id: Option<String>,
pub source_symbol: String,
pub target_symbol: String,
pub repository_id: String,
pub path: String,
pub line: usize,
pub column: usize,
pub relation: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_container: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_container: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_signature: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_signature: Option<String>,
pub precision: Option<String>,
pub call_path: Option<String>,
pub call_line: Option<usize>,
pub call_column: Option<usize>,
pub call_end_line: Option<usize>,
pub call_end_column: Option<usize>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub follow_up_structural: Vec<GeneratedStructuralFollowUp>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct IncomingCallsResponse {
pub matches: Vec<CallHierarchyMatch>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result_handle: Option<String>,
pub mode: NavigationMode,
pub availability: Option<NavigationAvailability>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_selection: Option<NavigationTargetSelectionSummary>,
#[schemars(schema_with = "super::metadata_object_field_schema")]
pub metadata: Option<MetadataObject>,
pub note: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct OutgoingCallsResponse {
pub matches: Vec<CallHierarchyMatch>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result_handle: Option<String>,
pub mode: NavigationMode,
pub availability: Option<NavigationAvailability>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_selection: Option<NavigationTargetSelectionSummary>,
#[schemars(schema_with = "super::metadata_object_field_schema")]
pub metadata: Option<MetadataObject>,
pub note: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct NavigationAvailability {
pub status: String,
pub reason: Option<String>,
pub precise_required_for_complete_results: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
pub struct DocumentSymbolsParams {
pub path: String,
pub repository_id: Option<String>,
pub include_follow_up_structural: Option<bool>,
pub top_level_only: Option<bool>,
pub response_mode: Option<ResponseMode>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct DocumentSymbolItem {
#[serde(skip_serializing_if = "Option::is_none")]
pub match_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stable_symbol_id: Option<String>,
pub symbol: String,
pub kind: String,
pub repository_id: String,
pub path: String,
pub line: usize,
pub column: usize,
pub end_line: Option<usize>,
pub end_column: Option<usize>,
pub container: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub signature: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub follow_up_structural: Vec<GeneratedStructuralFollowUp>,
pub children: Vec<DocumentSymbolItem>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct DocumentSymbolsResponse {
pub symbols: Vec<DocumentSymbolItem>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result_handle: Option<String>,
#[schemars(schema_with = "super::metadata_object_field_schema")]
pub metadata: Option<MetadataObject>,
pub note: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct InspectSyntaxTreeParams {
pub path: String,
pub repository_id: Option<String>,
pub line: Option<usize>,
pub column: Option<usize>,
pub max_ancestors: Option<usize>,
pub max_children: Option<usize>,
pub include_follow_up_structural: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct SyntaxTreeNodeItem {
pub kind: String,
pub named: bool,
pub path: String,
pub line: usize,
pub column: usize,
pub end_line: usize,
pub end_column: usize,
pub excerpt: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct InspectSyntaxTreeResponse {
pub repository_id: String,
pub path: String,
pub language: String,
pub focus: SyntaxTreeNodeItem,
pub ancestors: Vec<SyntaxTreeNodeItem>,
pub children: Vec<SyntaxTreeNodeItem>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub follow_up_structural: Vec<GeneratedStructuralFollowUp>,
#[schemars(schema_with = "super::metadata_object_field_schema")]
pub metadata: Option<MetadataObject>,
pub note: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum StructuralResultMode {
Matches,
Captures,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum StructuralAnchorSelection {
PrimaryCapture,
MatchCapture,
FirstUsefulNamedCapture,
FirstCapture,
CaptureRow,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct SearchStructuralParams {
pub query: String,
pub language: Option<String>,
pub repository_id: Option<String>,
pub path_regex: Option<String>,
pub limit: Option<usize>,
pub result_mode: Option<StructuralResultMode>,
pub primary_capture: Option<String>,
pub include_follow_up_structural: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct StructuralCaptureItem {
pub name: String,
pub line: usize,
pub column: usize,
pub end_line: usize,
pub end_column: usize,
pub excerpt: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct StructuralMatch {
pub repository_id: String,
pub path: String,
pub line: usize,
pub column: usize,
pub end_line: usize,
pub end_column: usize,
pub excerpt: String,
pub anchor_capture_name: Option<String>,
pub anchor_selection: StructuralAnchorSelection,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub captures: Vec<StructuralCaptureItem>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub follow_up_structural: Vec<GeneratedStructuralFollowUp>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct SearchStructuralResponse {
pub matches: Vec<StructuralMatch>,
pub result_mode: StructuralResultMode,
#[schemars(schema_with = "super::metadata_object_field_schema")]
pub metadata: Option<MetadataObject>,
pub note: Option<String>,
}