in server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/lspReadDocumentContents.ts [18:82]
public async invoke(params: LspReadDocumentContentsParams): Promise<InvokeOutput> {
if (params.uris.length === 0) {
return {
output: {
kind: 'text',
content: 'No URIs provided to read.',
},
}
}
try {
const results: { [uri: string]: string } = {}
for (const uri of params.uris) {
const document = await this.workspace.getTextDocument(uri)
if (!document) {
this.logging.warn(`Document not found: ${uri}`)
results[uri] = `[Document not found: ${uri}]`
continue
}
const content = document.getText()
if (params.readRange && params.readRange.length > 0) {
const lines = content.split('\n')
const [start, end] = this.parseLineRange(lines.length, params.readRange)
if (start > end) {
results[uri] = `[Invalid range for ${uri}: ${params.readRange.join('-')}]`
} else {
results[uri] = lines.slice(start, end + 1).join('\n')
}
} else {
results[uri] = content
}
}
// If only one URI was requested, return just its content
if (params.uris.length === 1) {
return {
output: {
kind: 'text',
content: results[params.uris[0]],
},
}
}
// Otherwise return a JSON object with all results
return {
output: {
kind: 'json',
content: results,
},
}
} catch (error) {
this.logging.error(`Error reading document contents: ${error}`)
return {
output: {
kind: 'text',
content: `Error reading document contents: ${error}`,
},
}
}
}