Closed
Description
Bug report
- I confirm this is a bug with Supabase, not with my own application.
- I confirm I have searched the Docs, GitHub Discussions, and Discord.
Describe the bug
I use postgrestools v1.1.4 extension in VSCode, IDK if I should've created the issue in postgrestools' for VSCode repo. But basically:
As soon as I type any character in a file that has Cyrillic characters or when I type a Cyrillic character in a file that has only ASCII characters, language server crashes with this log:
2025-03-31 03:40:18.720 [info] Encountered an unexpected error
This is a bug in Postgres Tools, not an error in your code, and we would appreciate it if you could report it along with the following information to help us fixing the issue:
Source Location: crates/pgt_workspace/src/workspace/server/change.rs:255:18
Thread Name: tokio-runtime-worker
Message: called `Option::unwrap()` on a `None` value
2025-03-31 03:40:18.746 [info] [Error - 3:40:18 AM] Server process exited with code 0.
2025-03-31 03:40:18.748 [info] [Error - 3:40:18 AM] PostgresTools language server closed
To Reproduce
Steps to reproduce the behavior, please provide code snippets or a repository:
- Use VSCode with postgrestools 1.1.4 extension
- Open .sql file
- Type any Cyrillic character
- See error
Expected behavior
Not to crash when Cyrillic character is typed
Screenshots
N/a
System information
- OS: Fedora Linux 41 (Workstation Edition) x86_64
- Kernel: Linux 6.13.8-200.fc41.x86_64
$ postgrestools version
:
CLI: 0.0.0
Server: not connected
Additional context
Full log from start to crash:
┐pgt_cli::commands::daemon::Running Server{pid=54563}
├─ INFO pgt_cli::service::unix Trying to connect to socket /home/evil/.cache/pgt/pgt-socket-0.0.0
├─ INFO pgt_cli::service::unix Remove socket folder /home/evil/.cache/pgt/pgt-socket-0.0.0
├─ INFO pgt_cli::service::unix Accepted connection
├─ INFO pgt_cli::service::unix Accepted connection
└─┐pgt_lsp::server::initialize{root_uri=file://PATH_REDACTED, capabilities=ClientCapabilities { workspace: Some(WorkspaceClientCapabilities { apply_edit: Some(true), workspace_edit: Some(WorkspaceEditClientCapabilities { document_changes: Some(true), resource_operations: Some([Create, Rename, Delete]), failure_handling: Some(TextOnlyTransactional), normalizes_line_endings: Some(true), change_annotation_support: Some(ChangeAnnotationWorkspaceEditClientCapabilities { groups_on_label: Some(true) }) }), did_change_configuration: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), did_change_watched_files: Some(DidChangeWatchedFilesClientCapabilities { dynamic_registration: Some(true), relative_pattern_support: Some(true) }), symbol: Some(WorkspaceSymbolClientCapabilities { dynamic_registration: Some(true), symbol_kind: Some(SymbolKindCapability { value_set: Some([File, Module, Namespace, Package, Class, Method, Property, Field, Constructor, Enum, Interface, Function, Variable, Constant, String, Number, Boolean, Array, Object, Key, Null, EnumMember, Struct, Event, Operator, TypeParameter]) }), tag_support: Some(TagSupport { value_set: [Deprecated] }), resolve_support: Some(WorkspaceSymbolResolveSupportCapability { properties: ["location.range"] }) }), execute_command: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), workspace_folders: Some(true), configuration: Some(true), semantic_tokens: Some(SemanticTokensWorkspaceClientCapabilities { refresh_support: Some(true) }), code_lens: Some(CodeLensWorkspaceClientCapabilities { refresh_support: Some(true) }), file_operations: Some(WorkspaceFileOperationsClientCapabilities { dynamic_registration: Some(true), did_create: Some(true), will_create: Some(true), did_rename: Some(true), will_rename: Some(true), did_delete: Some(true), will_delete: Some(true) }), inline_value: Some(InlineValueWorkspaceClientCapabilities { refresh_support: Some(true) }), inlay_hint: Some(InlayHintWorkspaceClientCapabilities { refresh_support: Some(true) }), diagnostic: None }), text_document: Some(TextDocumentClientCapabilities { synchronization: Some(TextDocumentSyncClientCapabilities { dynamic_registration: Some(true), will_save: Some(true), will_save_wait_until: Some(true), did_save: Some(true) }), completion: Some(CompletionClientCapabilities { dynamic_registration: Some(true), completion_item: Some(CompletionItemCapability { snippet_support: Some(true), commit_characters_support: Some(true), documentation_format: Some([Markdown, PlainText]), deprecated_support: Some(true), preselect_support: Some(true), tag_support: Some(TagSupport { value_set: [Deprecated] }), insert_replace_support: Some(true), resolve_support: Some(CompletionItemCapabilityResolveSupport { properties: ["documentation", "detail", "additionalTextEdits"] }), insert_text_mode_support: Some(InsertTextModeSupport { value_set: [AsIs, AdjustIndentation] }), label_details_support: Some(true) }), completion_item_kind: Some(CompletionItemKindCapability { value_set: Some([Text, Method, Function, Constructor, Field, Variable, Class, Interface, Module, Property, Unit, Value, Enum, Keyword, Snippet, Color, File, Reference, Folder, EnumMember, Constant, Struct, Event, Operator, TypeParameter]) }), context_support: Some(true), insert_text_mode: Some(AdjustIndentation), completion_list: Some(CompletionListCapability { item_defaults: Some(["commitCharacters", "editRange", "insertTextFormat", "insertTextMode", "data"]) }) }), hover: Some(HoverClientCapabilities { dynamic_registration: Some(true), content_format: Some([Markdown, PlainText]) }), signature_help: Some(SignatureHelpClientCapabilities { dynamic_registration: Some(true), signature_information: Some(SignatureInformationSettings { documentation_format: Some([Markdown, PlainText]), parameter_information: Some(ParameterInformationSettings { label_offset_support: Some(true) }), active_parameter_support: Some(true) }), context_support: Some(true) }), references: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), document_highlight: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), document_symbol: Some(DocumentSymbolClientCapabilities { dynamic_registration: Some(true), symbol_kind: Some(SymbolKindCapability { value_set: Some([File, Module, Namespace, Package, Class, Method, Property, Field, Constructor, Enum, Interface, Function, Variable, Constant, String, Number, Boolean, Array, Object, Key, Null, EnumMember, Struct, Event, Operator, TypeParameter]) }), hierarchical_document_symbol_support: Some(true), tag_support: Some(TagSupport { value_set: [Deprecated] }) }), formatting: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), range_formatting: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), on_type_formatting: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), declaration: Some(GotoCapability { dynamic_registration: Some(true), link_support: Some(true) }), definition: Some(GotoCapability { dynamic_registration: Some(true), link_support: Some(true) }), type_definition: Some(GotoCapability { dynamic_registration: Some(true), link_support: Some(true) }), implementation: Some(GotoCapability { dynamic_registration: Some(true), link_support: Some(true) }), code_action: Some(CodeActionClientCapabilities { dynamic_registration: Some(true), code_action_literal_support: Some(CodeActionLiteralSupport { code_action_kind: CodeActionKindLiteralSupport { value_set: ["", "quickfix", "refactor", "refactor.extract", "refactor.inline", "refactor.rewrite", "source", "source.organizeImports"] } }), is_preferred_support: Some(true), disabled_support: Some(true), data_support: Some(true), resolve_support: Some(CodeActionCapabilityResolveSupport { properties: ["edit"] }), honors_change_annotations: Some(true) }), code_lens: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), document_link: Some(DocumentLinkClientCapabilities { dynamic_registration: Some(true), tooltip_support: Some(true) }), color_provider: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), rename: Some(RenameClientCapabilities { dynamic_registration: Some(true), prepare_support: Some(true), prepare_support_default_behavior: Some(Identifier), honors_change_annotations: Some(true) }), publish_diagnostics: Some(PublishDiagnosticsClientCapabilities { related_information: Some(true), tag_support: Some(TagSupport { value_set: [Unnecessary, Deprecated] }), version_support: Some(false), code_description_support: Some(true), data_support: Some(true) }), folding_range: Some(FoldingRangeClientCapabilities { dynamic_registration: Some(true), range_limit: Some(5000), line_folding_only: Some(true), folding_range_kind: Some(FoldingRangeKindCapability { value_set: Some([Comment, Imports, Region]) }), folding_range: Some(FoldingRangeCapability { collapsed_text: Some(false) }) }), selection_range: Some(SelectionRangeClientCapabilities { dynamic_registration: Some(true) }), linked_editing_range: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), call_hierarchy: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), semantic_tokens: Some(SemanticTokensClientCapabilities { dynamic_registration: Some(true), requests: SemanticTokensClientCapabilitiesRequests { range: Some(true), full: Some(Delta { delta: Some(true) }) }, token_types: [SemanticTokenType("namespace"), SemanticTokenType("type"), SemanticTokenType("class"), SemanticTokenType("enum"), SemanticTokenType("interface"), SemanticTokenType("struct"), SemanticTokenType("typeParameter"), SemanticTokenType("parameter"), SemanticTokenType("variable"), SemanticTokenType("property"), SemanticTokenType("enumMember"), SemanticTokenType("event"), SemanticTokenType("function"), SemanticTokenType("method"), SemanticTokenType("macro"), SemanticTokenType("keyword"), SemanticTokenType("modifier"), SemanticTokenType("comment"), SemanticTokenType("string"), SemanticTokenType("number"), SemanticTokenType("regexp"), SemanticTokenType("operator"), SemanticTokenType("decorator")], token_modifiers: [SemanticTokenModifier("declaration"), SemanticTokenModifier("definition"), SemanticTokenModifier("readonly"), SemanticTokenModifier("static"), SemanticTokenModifier("deprecated"), SemanticTokenModifier("abstract"), SemanticTokenModifier("async"), SemanticTokenModifier("modification"), SemanticTokenModifier("documentation"), SemanticTokenModifier("defaultLibrary")], formats: [TokenFormat("relative")], overlapping_token_support: Some(false), multiline_token_support: Some(false), server_cancel_support: Some(true), augments_syntax_tokens: Some(true) }), moniker: None, type_hierarchy: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), inline_value: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true) }), inlay_hint: Some(InlayHintClientCapabilities { dynamic_registration: Some(true), resolve_support: Some(InlayHintResolveClientCapabilities { properties: ["tooltip", "textEdits", "label.tooltip", "label.location", "label.command"] }) }), diagnostic: Some(DiagnosticClientCapabilities { dynamic_registration: Some(true), related_document_support: Some(false) }) }), window: Some(WindowClientCapabilities { work_done_progress: Some(true), show_message: Some(ShowMessageRequestClientCapabilities { message_action_item: Some(MessageActionItemCapabilities { additional_properties_support: Some(true) }) }), show_document: Some(ShowDocumentClientCapabilities { support: true }) }), general: Some(GeneralClientCapabilities { regular_expressions: Some(RegularExpressionsClientCapabilities { engine: "ECMAScript", version: Some("ES2020") }), markdown: Some(MarkdownClientCapabilities { parser: "marked", version: Some("1.1.0"), allowed_tags: None }), stale_request_support: Some(StaleRequestSupportClientCapabilities { cancel: true, retry_on_content_modified: ["textDocument/semanticTokens/full", "textDocument/semanticTokens/range", "textDocument/semanticTokens/full/delta"] }), position_encodings: Some([PositionEncodingKind("utf-16")]) }), experimental: None }, client_info=ClientInfo { name: "Visual Studio Code", version: Some("1.98.2") }, workspace_folders=[WorkspaceFolder { uri: Url { scheme: "file", cannot_be_a_base: false, username: "", password: None, host: None, port: None, path: "PATH_REDACTED", query: None, fragment: None }, name: "REDACTED" }]}
├─ INFO pgt_lsp::server Starting Language Server...
┌─┘
└─┐pgt_lsp::server::initialized{}
├─ INFO pgt_lsp::server Attempting to load the configuration from 'postgrestools.jsonc' file
└─┐pgt_fs::fs::os::OsFileSystem::open_with_options{path="PATH_REDACTED/backend/postgrestools.jsonc", options=OpenOptions { read: true, write: false, truncate: false, create: false, create_new: false }}
┌─┘
└─┐pgt_fs::fs::os::OsFile::read_to_string{}
┌─┘
├─ INFO pgt_lsp::session Configuration loaded successfully from disk.
├─ INFO pgt_lsp::session Update workspace settings.
├─ INFO pgt_workspace::workspace::server Updating settings in workspace
├─ INFO pgt_workspace::workspace::server Updated settings in workspace
├─ WARN sqlx_postgres::options::pgpass Failed to open `.pgpass` file: Os { code: 2, kind: NotFound, message: "No such file or directory" }, path=/home/evil/.pgpass
├─ INFO pgt_workspace::workspace::server Updated Db connection settings
└─┐pgt_lsp::handlers::text_document::did_open{params=DidOpenTextDocumentParams { text_document: TextDocumentItem { uri: Url { scheme: "file", cannot_be_a_base: false, username: "", password: None, host: None, port: None, path: "PATH_REDACTED/backend/db/sql/query.sql", query: None, fragment: None }, language_id: "sql", version: 404, text: "REDACTED" } }}
├─ INFO pgt_workspace::workspace::server Opening file: PgTPath { path: "PATH_REDACTED/backend/db/sql/query.sql", kind: FileKinds(BitFlags<FileKind>(0b1000, Handleable)), was_written: false }
├─ INFO pgt_workspace::workspace::server::pg_query adding diagnostics
├─ INFO pgt_workspace::workspace::server::pg_query adding diagnostics
├─ INFO pgt_workspace::workspace::server Pulled 7 diagnostic(s)
┌─┘
├─ INFO pgt_lsp::session Unregister capabilities "workspace/didChangeConfiguration, workspace/didChangeWatchedFiles"
├─ INFO pgt_lsp::session Register capabilities "workspace/didChangeConfiguration, workspace/didChangeWatchedFiles"
├─ INFO pgt_workspace::workspace::server Pulled 7 diagnostic(s)
┌─┘
└─┐pgt_lsp::handlers::text_document::did_change{params=DidChangeTextDocumentParams { text_document: VersionedTextDocumentIdentifier { uri: Url { scheme: "file", cannot_be_a_base: false, username: "", password: None, host: None, port: None, path: "PATH_REDACTED/backend/db/sql/query.sql", query: None, fragment: None }, version: 405 }, content_changes: [TextDocumentContentChangeEvent { range: Some(Range { start: Position { line: 162, character: 0 }, end: Position { line: 162, character: 0 } }), range_length: Some(0), text: "\n" }] }}
├─ INFO pgt_workspace::workspace::server Changing file: ChangeFileParams { path: PgTPath { path: "PATH_REDACTED/backend/db/sql/query.sql", kind: FileKinds(BitFlags<FileKind>(0b1000, Handleable)), was_written: false }, version: 405, changes: [ChangeParams { range: Some(3587..3587), text: "\n" }] }
├─ DEBUG pgt_workspace::workspace::server Deleting statement: Statement { path: PgTPath { path: "PATH_REDACTED/backend/db/sql/query.sql", kind: FileKinds(BitFlags<FileKind>(0b1000, Handleable)), was_written: false }, id: 20 }
├─ DEBUG pgt_workspace::workspace::server Adding statement: AddedStatement { stmt: Statement { path: PgTPath { path: "PATH_REDACTED/backend/db/sql/query.sql", kind: FileKinds(BitFlags<FileKind>(0b1000, Handleable)), was_written: false }, id: 21 }, text: "UPDATE\nSET value = excluded.value;" }
├─ INFO pgt_workspace::workspace::server::pg_query adding diagnostics
├─ INFO pgt_workspace::workspace::server Pulled 7 diagnostic(s)
┌─┘
└─┐pgt_lsp::handlers::text_document::did_change{params=DidChangeTextDocumentParams { text_document: VersionedTextDocumentIdentifier { uri: Url { scheme: "file", cannot_be_a_base: false, username: "", password: None, host: None, port: None, path: "PATH_REDACTED/backend/db/sql/query.sql", query: None, fragment: None }, version: 406 }, content_changes: [TextDocumentContentChangeEvent { range: Some(Range { start: Position { line: 163, character: 0 }, end: Position { line: 163, character: 0 } }), range_length: Some(0), text: "ы" }] }}
├─ INFO pgt_workspace::workspace::server Changing file: ChangeFileParams { path: PgTPath { path: "PATH_REDACTED/backend/db/sql/query.sql", kind: FileKinds(BitFlags<FileKind>(0b1000, Handleable)), was_written: false }, version: 406, changes: [ChangeParams { range: Some(3588..3588), text: "ы" }] }
├─ ERROR pgt_cli::panic Encountered an unexpected error
│
│ This is a bug in Postgres Tools, not an error in your code, and we would appreciate it if you could report it along with the following information to help us fixing the issue:
│
│ Source Location: crates/pgt_workspace/src/workspace/server/change.rs:311:14
│ Thread Name: tokio-runtime-worker
│ Message: called `Option::unwrap()` on a `None` value
│
┌─┘
INFO pgt_cli::commands::daemon Received shutdown signal
┘