in src/shared/codelens/codeLensUtils.ts [33:110]
export async function makeCodeLenses({
document,
token,
handlers,
runtimeFamily,
}: {
document: vscode.TextDocument
token: vscode.CancellationToken
handlers: LambdaHandlerCandidate[]
runtimeFamily: RuntimeFamily
}): Promise<vscode.CodeLens[]> {
const workspaceFolder: vscode.WorkspaceFolder | undefined = vscode.workspace.getWorkspaceFolder(document.uri)
if (!workspaceFolder) {
getLogger().error(`makeCodeLenses: source file is external to workspace: ${document.uri}`)
return []
}
const lenses: vscode.CodeLens[] = []
for (const handler of handlers) {
// handler.range is a RangeOrCharOffset union type. Extract vscode.Range.
const range =
handler.range instanceof vscode.Range
? handler.range
: new vscode.Range(
document.positionAt(handler.range.positionStart),
document.positionAt(handler.range.positionEnd)
)
try {
const associatedResources = getResourcesForHandler(handler.filename, handler.handlerName)
const templateConfigs: AddSamDebugConfigurationInput[] = []
if (associatedResources.length > 0) {
for (const resource of associatedResources) {
const isImage = CloudFormation.isImageLambdaResource(resource.resourceData.Properties)
templateConfigs.push({
resourceName: resource.name,
rootUri: vscode.Uri.file(resource.templateDatum.path),
runtimeFamily: isImage ? runtimeFamily : undefined,
})
const events = resource.resourceData.Properties?.Events
if (events) {
// Check for api events
for (const key in events) {
const value = events[key]
if (value.Type === 'Api') {
templateConfigs.push({
resourceName: resource.name,
rootUri: vscode.Uri.file(resource.templateDatum.path),
apiEvent: { name: key, event: value },
runtimeFamily: isImage ? runtimeFamily : undefined,
})
}
}
}
}
}
const codeConfig: AddSamDebugConfigurationInput = {
resourceName: handler.handlerName,
rootUri: handler.manifestUri,
runtimeFamily,
}
lenses.push(
makeAddCodeSamDebugCodeLens(range, codeConfig, templateConfigs, false),
makeAddCodeSamDebugCodeLens(range, codeConfig, templateConfigs, true)
)
} catch (err) {
getLogger().error(
`Could not generate 'configure' code lens for handler '${handler.handlerName}': %O`,
err as Error
)
}
}
return lenses
}