astral-sh/ruff · error
Input is not a text document: {path}
Error message
Input is not a text document: {path} What it means
A std::io::Error (InvalidInput) built by not_a_text_document in the ty server's virtual file system: a read targeted a virtual path that is not one of the open LSP text documents. The server only serves file contents for documents it holds in memory.
Source
Thrown at crates/ty_server/src/system.rs:338
/// Rejects commands without retaining the LSP document index.
struct UntrustedWorkspaceExecutor;
impl CommandExecutor for UntrustedWorkspaceExecutor {
fn execute(&self, _command: Command) -> Result<Output> {
Err(std::io::Error::new(
std::io::ErrorKind::PermissionDenied,
"external commands are disabled in an untrusted workspace",
))
}
fn dyn_clone(&self) -> Box<dyn CommandExecutor> {
Box::new(Self)
}
}
fn not_a_text_document(path: impl Display) -> std::io::Error {
std::io::Error::new(
std::io::ErrorKind::InvalidInput,
format!("Input is not a text document: {path}"),
)
}
fn virtual_path_not_found(path: impl Display) -> std::io::Error {
std::io::Error::new(
std::io::ErrorKind::NotFound,
format!("Virtual path does not exist: {path}"),
)
}
/// Helper function to get the [`FileRevision`] of the given document.
fn document_revision(document: &Document, index: &Index) -> FileRevision {
// The file revision is just an opaque number which doesn't have any significant meaning other
// than that the file has changed if the revisions are different.
#[expect(clippy::cast_sign_loss)]
match document {View on GitHub (pinned to 26f38c119c)
Solutions
- Open the file in the editor so it becomes a known text document
- Read from the real filesystem path instead of the virtual document path
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at crates/ty_server/src/system.rs:338 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of astral-sh/ruff@26f38c119c (2026-09-05).
Data as JSON: /api/errors/2e0ea8458375a782.
Report an issue: GitHub.