Index: debian-lsp/Cargo.toml
===================================================================
--- debian-lsp.orig/Cargo.toml
+++ debian-lsp/Cargo.toml
@@ -93,7 +93,7 @@ version = "1"
 features = ["full"]
 
 [dependencies.tower-lsp-server]
-version = "0.23"
+version = "0.22"
 
 [dependencies.yaml-edit]
 version = "0.2.0"
Index: debian-lsp/src/changelog/completion.rs
===================================================================
--- debian-lsp.orig/src/changelog/completion.rs
+++ debian-lsp/src/changelog/completion.rs
@@ -1,6 +1,6 @@
 use rowan::ast::AstNode;
 use text_size::{TextRange, TextSize};
-use tower_lsp_server::ls_types::{CompletionItem, CompletionItemKind, Documentation, Position};
+use tower_lsp_server::lsp_types::{CompletionItem, CompletionItemKind, Documentation, Position};
 
 use super::fields::{get_debian_distributions, URGENCY_LEVELS};
 
Index: debian-lsp/src/changelog/detection.rs
===================================================================
--- debian-lsp.orig/src/changelog/detection.rs
+++ debian-lsp/src/changelog/detection.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::Uri;
+use tower_lsp_server::lsp_types::Uri;
 
 /// Check if a given URL represents a Debian changelog file
 pub fn is_changelog_file(uri: &Uri) -> bool {
Index: debian-lsp/src/changelog/semantic.rs
===================================================================
--- debian-lsp.orig/src/changelog/semantic.rs
+++ debian-lsp/src/changelog/semantic.rs
@@ -1,7 +1,7 @@
 //! Semantic token generation for Debian changelog files.
 
 use debian_changelog::SyntaxKind;
-use tower_lsp_server::ls_types::SemanticToken;
+use tower_lsp_server::lsp_types::SemanticToken;
 
 use crate::deb822::semantic::{SemanticTokensBuilder, TokenType};
 use crate::position::offset_to_position;
Index: debian-lsp/src/control/actions.rs
===================================================================
--- debian-lsp.orig/src/control/actions.rs
+++ debian-lsp/src/control/actions.rs
@@ -1,7 +1,7 @@
 use crate::position::text_range_to_lsp_range;
 use crate::workspace::FieldCasingIssue;
 use text_size::TextRange;
-use tower_lsp_server::ls_types::*;
+use tower_lsp_server::lsp_types::*;
 
 /// Generate a wrap-and-sort code action for a control file
 ///
Index: debian-lsp/src/control/completion.rs
===================================================================
--- debian-lsp.orig/src/control/completion.rs
+++ debian-lsp/src/control/completion.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::{CompletionItem, CompletionItemKind};
+use tower_lsp_server::lsp_types::{CompletionItem, CompletionItemKind};
 
 use super::fields::{
     CONTROL_FIELDS, CONTROL_PRIORITY_VALUES, CONTROL_SECTION_AREAS, CONTROL_SECTION_VALUES,
@@ -18,7 +18,7 @@ use crate::package_cache::SharedPackageC
 pub fn get_completions(
     deb822: &deb822_lossless::Deb822,
     source_text: &str,
-    position: tower_lsp_server::ls_types::Position,
+    position: tower_lsp_server::lsp_types::Position,
 ) -> Vec<CompletionItem> {
     crate::deb822::completion::get_completions(
         deb822,
@@ -139,7 +139,7 @@ mod tests {
     use crate::architecture::SharedArchitectureList;
     use crate::package_cache::TestPackageCache;
     use std::sync::Arc;
-    use tower_lsp_server::ls_types::Position;
+    use tower_lsp_server::lsp_types::Position;
 
     fn test_cache() -> SharedPackageCache {
         TestPackageCache::new_shared(&[
@@ -321,7 +321,7 @@ mod tests {
         let ctx = crate::deb822::completion::get_cursor_context(
             &deb822,
             text,
-            tower_lsp_server::ls_types::Position::new(0, 15),
+            tower_lsp_server::lsp_types::Position::new(0, 15),
         )
         .expect("Should have context");
 
@@ -355,7 +355,7 @@ mod tests {
         let ctx = crate::deb822::completion::get_cursor_context(
             &deb822,
             text,
-            tower_lsp_server::ls_types::Position::new(0, 17),
+            tower_lsp_server::lsp_types::Position::new(0, 17),
         )
         .expect("Should have context");
 
Index: debian-lsp/src/control/detection.rs
===================================================================
--- debian-lsp.orig/src/control/detection.rs
+++ debian-lsp/src/control/detection.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::Uri;
+use tower_lsp_server::lsp_types::Uri;
 
 /// Check if a given URL represents a Debian control file
 pub fn is_control_file(uri: &Uri) -> bool {
Index: debian-lsp/src/control/diagnostics.rs
===================================================================
--- debian-lsp.orig/src/control/diagnostics.rs
+++ debian-lsp/src/control/diagnostics.rs
@@ -1,5 +1,5 @@
 use text_size::TextRange;
-use tower_lsp_server::ls_types::{Diagnostic, DiagnosticSeverity, NumberOrString, Position, Range};
+use tower_lsp_server::lsp_types::{Diagnostic, DiagnosticSeverity, NumberOrString, Position, Range};
 
 use crate::workspace::FieldCasingIssue;
 
Index: debian-lsp/src/control/relation_completion.rs
===================================================================
--- debian-lsp.orig/src/control/relation_completion.rs
+++ debian-lsp/src/control/relation_completion.rs
@@ -1,7 +1,7 @@
 use debian_control::lossless::relations::Relations;
 use debian_control::relations::SyntaxKind as RelSyntaxKind;
 use rowan::NodeOrToken;
-use tower_lsp_server::ls_types::{CompletionItem, CompletionItemKind, Documentation};
+use tower_lsp_server::lsp_types::{CompletionItem, CompletionItemKind, Documentation};
 
 use crate::architecture::SharedArchitectureList;
 use crate::package_cache::SharedPackageCache;
Index: debian-lsp/src/control/semantic.rs
===================================================================
--- debian-lsp.orig/src/control/semantic.rs
+++ debian-lsp/src/control/semantic.rs
@@ -1,6 +1,6 @@
 //! Semantic token generation for Debian control files.
 
-use tower_lsp_server::ls_types::SemanticToken;
+use tower_lsp_server::lsp_types::SemanticToken;
 
 use super::get_standard_field_name;
 use crate::deb822::semantic::{generate_tokens, FieldValidator};
Index: debian-lsp/src/copyright/actions.rs
===================================================================
--- debian-lsp.orig/src/copyright/actions.rs
+++ debian-lsp/src/copyright/actions.rs
@@ -1,7 +1,7 @@
 use crate::position::text_range_to_lsp_range;
 use crate::workspace::FieldCasingIssue;
 use text_size::TextRange;
-use tower_lsp_server::ls_types::*;
+use tower_lsp_server::lsp_types::*;
 
 /// Generate a wrap-and-sort code action for a copyright file
 ///
Index: debian-lsp/src/copyright/completion.rs
===================================================================
--- debian-lsp.orig/src/copyright/completion.rs
+++ debian-lsp/src/copyright/completion.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::{CompletionItem, CompletionItemKind, Position};
+use tower_lsp_server::lsp_types::{CompletionItem, CompletionItemKind, Position};
 
 use super::fields::{get_common_licenses, COPYRIGHT_FIELDS};
 
Index: debian-lsp/src/copyright/detection.rs
===================================================================
--- debian-lsp.orig/src/copyright/detection.rs
+++ debian-lsp/src/copyright/detection.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::Uri;
+use tower_lsp_server::lsp_types::Uri;
 
 /// Check if a given URL represents a Debian copyright file
 pub fn is_copyright_file(uri: &Uri) -> bool {
Index: debian-lsp/src/copyright/semantic.rs
===================================================================
--- debian-lsp.orig/src/copyright/semantic.rs
+++ debian-lsp/src/copyright/semantic.rs
@@ -1,6 +1,6 @@
 //! Semantic token generation for Debian copyright files.
 
-use tower_lsp_server::ls_types::SemanticToken;
+use tower_lsp_server::lsp_types::SemanticToken;
 
 use super::get_standard_field_name;
 use crate::deb822::semantic::{generate_tokens, FieldValidator};
Index: debian-lsp/src/deb822/completion.rs
===================================================================
--- debian-lsp.orig/src/deb822/completion.rs
+++ debian-lsp/src/deb822/completion.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::{CompletionItem, CompletionItemKind, Documentation, Position};
+use tower_lsp_server::lsp_types::{CompletionItem, CompletionItemKind, Documentation, Position};
 
 /// A field definition for a deb822-based file format.
 pub struct FieldInfo {
Index: debian-lsp/src/deb822/semantic.rs
===================================================================
--- debian-lsp.orig/src/deb822/semantic.rs
+++ debian-lsp/src/deb822/semantic.rs
@@ -6,7 +6,7 @@
 
 use deb822_lossless::{Deb822, SyntaxKind};
 use rowan::ast::AstNode;
-use tower_lsp_server::ls_types::SemanticToken;
+use tower_lsp_server::lsp_types::SemanticToken;
 
 use crate::position::offset_to_position;
 
Index: debian-lsp/src/main.rs
===================================================================
--- debian-lsp.orig/src/main.rs
+++ debian-lsp/src/main.rs
@@ -6,7 +6,7 @@
 use std::sync::Arc;
 use tokio::sync::Mutex;
 use tower_lsp_server::jsonrpc::Result;
-use tower_lsp_server::ls_types::*;
+use tower_lsp_server::lsp_types::*;
 use tower_lsp_server::{Client, LanguageServer, LspService, Server};
 
 mod architecture;
Index: debian-lsp/src/position.rs
===================================================================
--- debian-lsp.orig/src/position.rs
+++ debian-lsp/src/position.rs
@@ -1,5 +1,5 @@
 use text_size::{TextRange, TextSize};
-use tower_lsp_server::ls_types::{Position, Range};
+use tower_lsp_server::lsp_types::{Position, Range};
 
 /// Convert TextSize to LSP Position
 pub fn offset_to_position(text: &str, offset: TextSize) -> Position {
Index: debian-lsp/src/source_format/completion.rs
===================================================================
--- debian-lsp.orig/src/source_format/completion.rs
+++ debian-lsp/src/source_format/completion.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::{CompletionItem, CompletionItemKind, Position, Uri};
+use tower_lsp_server::lsp_types::{CompletionItem, CompletionItemKind, Position, Uri};
 
 use super::detection::is_source_format_file;
 use super::fields::SOURCE_FORMATS;
Index: debian-lsp/src/source_format/detection.rs
===================================================================
--- debian-lsp.orig/src/source_format/detection.rs
+++ debian-lsp/src/source_format/detection.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::Uri;
+use tower_lsp_server::lsp_types::Uri;
 
 /// Check if the given URI points to a debian/source/format file
 pub fn is_source_format_file(uri: &Uri) -> bool {
Index: debian-lsp/src/tests/completion.rs
===================================================================
--- debian-lsp.orig/src/tests/completion.rs
+++ debian-lsp/src/tests/completion.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::{CompletionItem, Position, Uri};
+use tower_lsp_server::lsp_types::{CompletionItem, Position, Uri};
 
 /// Get completion items for a debian/tests/control file
 pub fn get_completions(_uri: &Uri, _position: Position) -> Vec<CompletionItem> {
Index: debian-lsp/src/tests/detection.rs
===================================================================
--- debian-lsp.orig/src/tests/detection.rs
+++ debian-lsp/src/tests/detection.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::Uri;
+use tower_lsp_server::lsp_types::Uri;
 
 /// Check if a given URL represents a Debian tests/control file
 pub fn is_tests_control_file(uri: &Uri) -> bool {
Index: debian-lsp/src/tests/semantic.rs
===================================================================
--- debian-lsp.orig/src/tests/semantic.rs
+++ debian-lsp/src/tests/semantic.rs
@@ -1,6 +1,6 @@
 //! Semantic token generation for debian/tests/control files.
 
-use tower_lsp_server::ls_types::SemanticToken;
+use tower_lsp_server::lsp_types::SemanticToken;
 
 use crate::deb822::semantic::{generate_tokens, FieldValidator};
 
Index: debian-lsp/src/upstream_metadata/completion.rs
===================================================================
--- debian-lsp.orig/src/upstream_metadata/completion.rs
+++ debian-lsp/src/upstream_metadata/completion.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::{CompletionItem, CompletionItemKind, Position};
+use tower_lsp_server::lsp_types::{CompletionItem, CompletionItemKind, Position};
 
 use super::fields::UPSTREAM_FIELDS;
 
Index: debian-lsp/src/upstream_metadata/detection.rs
===================================================================
--- debian-lsp.orig/src/upstream_metadata/detection.rs
+++ debian-lsp/src/upstream_metadata/detection.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::Uri;
+use tower_lsp_server::lsp_types::Uri;
 
 /// Check if a given URL represents a debian/upstream/metadata file.
 pub fn is_upstream_metadata_file(uri: &Uri) -> bool {
Index: debian-lsp/src/upstream_metadata/semantic.rs
===================================================================
--- debian-lsp.orig/src/upstream_metadata/semantic.rs
+++ debian-lsp/src/upstream_metadata/semantic.rs
@@ -1,6 +1,6 @@
 //! Semantic token generation for debian/upstream/metadata files.
 
-use tower_lsp_server::ls_types::SemanticToken;
+use tower_lsp_server::lsp_types::SemanticToken;
 use yaml_edit::{Document, YamlNode};
 
 use super::fields::get_standard_field_name;
Index: debian-lsp/src/watch/completion.rs
===================================================================
--- debian-lsp.orig/src/watch/completion.rs
+++ debian-lsp/src/watch/completion.rs
@@ -1,6 +1,6 @@
 use crate::deb822::completion::FieldInfo;
 use crate::position::try_position_to_offset;
-use tower_lsp_server::ls_types::{
+use tower_lsp_server::lsp_types::{
     CompletionItem, CompletionItemKind, Documentation, Position, Uri,
 };
 
Index: debian-lsp/src/watch/detection.rs
===================================================================
--- debian-lsp.orig/src/watch/detection.rs
+++ debian-lsp/src/watch/detection.rs
@@ -1,4 +1,4 @@
-use tower_lsp_server::ls_types::Uri;
+use tower_lsp_server::lsp_types::Uri;
 
 /// Check if a given URL represents a Debian watch file
 pub fn is_watch_file(uri: &Uri) -> bool {
Index: debian-lsp/src/watch/fields.rs
===================================================================
--- debian-lsp.orig/src/watch/fields.rs
+++ debian-lsp/src/watch/fields.rs
@@ -9,7 +9,7 @@ pub enum OptionValueType {
     Enum(&'static [&'static str]),
 }
 
-use tower_lsp_server::ls_types::{CompletionItem, CompletionItemKind};
+use tower_lsp_server::lsp_types::{CompletionItem, CompletionItemKind};
 
 /// A watch file field definition, used for both v1-4 line-based options and v5 deb822 fields.
 pub struct WatchField {
Index: debian-lsp/src/watch/semantic.rs
===================================================================
--- debian-lsp.orig/src/watch/semantic.rs
+++ debian-lsp/src/watch/semantic.rs
@@ -2,7 +2,7 @@
 //!
 //! Supports both deb822 (v5) and line-based (v1-4) watch file formats.
 
-use tower_lsp_server::ls_types::SemanticToken;
+use tower_lsp_server::lsp_types::SemanticToken;
 
 use crate::deb822::semantic::{SemanticTokensBuilder, TokenType};
 use crate::position::offset_to_position;
Index: debian-lsp/src/workspace.rs
===================================================================
--- debian-lsp.orig/src/workspace.rs
+++ debian-lsp/src/workspace.rs
@@ -1,6 +1,6 @@
 use rowan::ast::AstNode;
 use text_size::TextRange;
-use tower_lsp_server::ls_types::{Diagnostic, DiagnosticSeverity, NumberOrString, Uri};
+use tower_lsp_server::lsp_types::{Diagnostic, DiagnosticSeverity, NumberOrString, Uri};
 
 /// Information about a field casing issue
 #[derive(Debug, Clone)]
