export async function makeCodeLenses()

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
}