#![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::{
CodeActionRequest, Completion, DocumentHighlightRequest, DocumentSymbolRequest,
FoldingRangeRequest, Formatting, GotoDefinition, HoverRequest, PrepareRenameRequest,
RangeFormatting, References, Rename, Request as RequestTrait, ResolveCompletionItem,
SemanticTokensFullRequest, SignatureHelpRequest, WillRenameFiles, WorkspaceSymbolRequest,
};
use lsp_types::{
CodeAction, CodeActionKind, CodeActionOrCommand, CodeActionParams,
CodeActionProviderCapability, CodeActionResponse, CompletionItem, CompletionItemKind,
CompletionList, CompletionOptions, CompletionParams, CompletionResponse,
Diagnostic as LspDiagnostic, DiagnosticSeverity, DidChangeConfigurationParams,
DidChangeTextDocumentParams, DidCloseTextDocumentParams, DidOpenTextDocumentParams,
DocumentFormattingParams, DocumentHighlight, DocumentHighlightKind, DocumentHighlightParams,
DocumentRangeFormattingParams, DocumentSymbol, DocumentSymbolParams, DocumentSymbolResponse,
Documentation, FileOperationFilter, FileOperationPattern, FileOperationRegistrationOptions,
FoldingRange, FoldingRangeKind, FoldingRangeParams, FoldingRangeProviderCapability,
GotoDefinitionParams, GotoDefinitionResponse, Hover, HoverContents, HoverParams,
HoverProviderCapability, InitializeResult, Location, MarkupContent, MarkupKind, NumberOrString,
OneOf, ParameterInformation, ParameterLabel, Position, PrepareRenameResponse,
PublishDiagnosticsParams, Range, ReferenceParams, RenameFilesParams, RenameOptions,
RenameParams, SemanticToken, SemanticTokenModifier, SemanticTokenType, SemanticTokens,
SemanticTokensFullOptions, SemanticTokensLegend, SemanticTokensOptions, SemanticTokensParams,
SemanticTokensResult, SemanticTokensServerCapabilities, ServerCapabilities, ServerInfo,
SignatureHelp, SignatureHelpOptions, SignatureHelpParams, SignatureInformation,
SymbolKind as LspSymbolKind, TextDocumentPositionParams, TextDocumentSyncCapability,
TextDocumentSyncKind, TextEdit, 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::file_discovery::collect_r_files;
use crate::formatter::{FormatStyle, format_node, format_range, format_with_style};
use crate::incremental::{Analysis, IncrementalDatabase, SourceFile};
use crate::linter::{Diagnostic, 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 code_actions;
mod completion;
mod file_rename;
mod folding;
mod format;
mod hover;
mod lint_thread;
mod navigation;
mod read_jobs;
mod semantic_tokens;
mod server;
mod settings;
mod signature;
mod state;
mod symbols;
mod uri;
mod workspace_symbols;
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 semantic_tokens::*;
pub(crate) use settings::*;
pub(crate) use signature::*;
pub(crate) use state::*;
pub(crate) use workspace_symbols::*;
pub use code_actions::compute_code_actions;
pub use completion::{compute_completions, resolve_completion};
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 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::*;