#![allow(clippy::mutable_key_type)]
mod task_pool;
use std::collections::{HashMap, HashSet};
use std::panic::AssertUnwindSafe;
use std::path::{Path, PathBuf};
use std::sync::Arc;
use std::thread::JoinHandle;
use crossbeam_channel::{Receiver, Sender, select};
use lsp_server::{Connection, ErrorCode, Message, Notification, Request, RequestId, Response};
use lsp_types::notification::{
DidChangeConfiguration, DidChangeTextDocument, DidCloseTextDocument, DidOpenTextDocument,
DidRenameFiles, Notification as NotificationTrait, PublishDiagnostics,
};
use lsp_types::request::{
CallHierarchyIncomingCalls, CallHierarchyOutgoingCalls, CallHierarchyPrepare,
CodeActionRequest, ColorPresentationRequest, Completion, DocumentColor,
DocumentDiagnosticRequest, DocumentHighlightRequest, DocumentLinkRequest,
DocumentSymbolRequest, FoldingRangeRequest, Formatting, GotoDefinition, HoverRequest,
PrepareRenameRequest, RangeFormatting, References, Rename, Request as RequestTrait,
ResolveCompletionItem, SelectionRangeRequest, SemanticTokensFullRequest, SignatureHelpRequest,
TypeHierarchyPrepare, TypeHierarchySubtypes, TypeHierarchySupertypes, WillRenameFiles,
WorkspaceDiagnosticRefresh, WorkspaceSymbolRequest,
};
use lsp_types::{
CallHierarchyIncomingCall, CallHierarchyIncomingCallsParams, CallHierarchyItem,
CallHierarchyOutgoingCall, CallHierarchyOutgoingCallsParams, CallHierarchyPrepareParams,
CallHierarchyServerCapability, CodeAction, CodeActionKind, CodeActionOrCommand,
CodeActionParams, CodeActionProviderCapability, CodeActionResponse, Color, ColorInformation,
ColorPresentation, ColorPresentationParams, ColorProviderCapability, CompletionItem,
CompletionItemKind, CompletionList, CompletionOptions, CompletionParams, CompletionResponse,
Diagnostic as LspDiagnostic, DiagnosticOptions, DiagnosticServerCapabilities,
DiagnosticSeverity, DidChangeConfigurationParams, DidChangeTextDocumentParams,
DidCloseTextDocumentParams, DidOpenTextDocumentParams, DocumentColorParams,
DocumentDiagnosticParams, DocumentDiagnosticReport, DocumentDiagnosticReportResult,
DocumentFormattingParams, DocumentHighlight, DocumentHighlightKind, DocumentHighlightParams,
DocumentLink, DocumentLinkOptions, DocumentLinkParams, DocumentRangeFormattingParams,
DocumentSymbol, DocumentSymbolParams, DocumentSymbolResponse, Documentation,
FileOperationFilter, FileOperationPattern, FileOperationRegistrationOptions, FoldingRange,
FoldingRangeKind, FoldingRangeParams, FoldingRangeProviderCapability,
FullDocumentDiagnosticReport, GotoDefinitionParams, GotoDefinitionResponse, Hover,
HoverContents, HoverParams, HoverProviderCapability, InitializeResult, Location, MarkupContent,
MarkupKind, NumberOrString, OneOf, ParameterInformation, ParameterLabel, Position,
PrepareRenameResponse, PublishDiagnosticsParams, Range, ReferenceParams,
RelatedFullDocumentDiagnosticReport, RelatedUnchangedDocumentDiagnosticReport,
RenameFilesParams, RenameOptions, RenameParams, SelectionRange, SelectionRangeParams,
SelectionRangeProviderCapability, SemanticToken, SemanticTokenModifier, SemanticTokenType,
SemanticTokens, SemanticTokensFullOptions, SemanticTokensLegend, SemanticTokensOptions,
SemanticTokensParams, SemanticTokensResult, SemanticTokensServerCapabilities,
ServerCapabilities, ServerInfo, SignatureHelp, SignatureHelpOptions, SignatureHelpParams,
SignatureInformation, SymbolKind as LspSymbolKind, TextDocumentPositionParams,
TextDocumentSyncCapability, TextDocumentSyncKind, TextEdit, TypeHierarchyItem,
TypeHierarchyPrepareParams, TypeHierarchySubtypesParams, TypeHierarchySupertypesParams,
UnchangedDocumentDiagnosticReport, Uri, WorkspaceEdit,
WorkspaceFileOperationsServerCapabilities, WorkspaceServerCapabilities, WorkspaceSymbol,
WorkspaceSymbolParams, WorkspaceSymbolResponse,
};
use rowan::{NodeOrToken, SyntaxToken, TextRange, TextSize, TokenAtOffset};
use salsa::Database as _;
use serde::{Deserialize, Serialize};
use smol_str::SmolStr;
use crate::ast::{ArgList, AssignmentExpr, AstNode as _, BinaryExpr, CallExpr, FunctionExpr};
use crate::config::{Config, FormatConfig, IndexConfig, LintConfig};
use crate::formatter::{FormatStyle, format_node, format_range, format_with_style};
use crate::incremental::{Analysis, IncrementalDatabase, SourceFile};
use crate::linter::rules::ResolvedRules;
use crate::linter::{Diagnostic, LintError, Severity};
use crate::parser::{diff_edit, map_range_through_edit, parse};
use crate::project::DefKind;
use crate::rindex::build::{BuildOptions, build_index};
use crate::rindex::cache::{Cache, resolve_cache_root};
use crate::rindex::discover::{referenced_in_source, with_default_packages};
use crate::rindex::libpaths::LibrarySearch;
use crate::rindex::provider::{
CompositeProvider, IndexedProvider, base_names, base_package_of, bundled_exports,
package_indexed, resolve_origin,
};
use crate::rindex::remote::{RemoteExports, Sidecar};
use crate::rindex::schema::{Formal, SymbolEntry, SymbolKind};
use crate::semantic::{BindingId, BindingKind, PackageOrigin, SemanticModel};
use crate::syntax::{NodePtr, RLanguage, SyntaxKind, SyntaxNode};
use crate::text::LineIndex;
use task_pool::{Spawner, TaskPool, read_pool_size};
mod call_hierarchy;
mod code_actions;
mod color_names;
mod completion;
mod document_color;
mod document_links;
mod file_rename;
mod folding;
mod format;
mod hover;
mod lint_thread;
mod navigation;
mod read_jobs;
mod roxygen_action;
mod selection_range;
mod semantic_tokens;
mod server;
mod settings;
mod signature;
mod state;
mod symbols;
mod type_hierarchy;
mod uri;
mod workspace_symbols;
pub(crate) use call_hierarchy::*;
pub(crate) use code_actions::*;
pub(crate) use completion::*;
pub(crate) use file_rename::*;
pub(crate) use format::*;
pub(crate) use hover::*;
pub(crate) use lint_thread::*;
pub(crate) use navigation::*;
pub(crate) use read_jobs::*;
pub(crate) use roxygen_action::*;
pub(crate) use semantic_tokens::*;
pub(crate) use settings::*;
pub(crate) use signature::*;
pub(crate) use state::*;
pub(crate) use type_hierarchy::*;
pub(crate) use workspace_symbols::*;
pub use code_actions::compute_code_actions;
pub use completion::{compute_completions, resolve_completion};
pub use document_color::{compute_color_presentations, compute_document_colors};
pub use document_links::compute_document_links;
pub use folding::compute_folding_ranges;
pub use format::{compute_format_edits, compute_format_range_edits};
pub use hover::compute_hover;
pub use navigation::{
PreparedRename, RenameAnchor, compute_definition, compute_document_highlights,
compute_prepare_rename, compute_references, compute_rename, compute_rename_with_anchor,
};
pub use selection_range::compute_selection_ranges;
pub use semantic_tokens::compute_semantic_tokens;
pub use server::run;
pub use signature::compute_signature_help;
pub use symbols::compute_document_symbols;
#[cfg(test)]
mod test_support;
#[cfg(test)]
use test_support::*;