in src/dynamicResources/activation.ts [25:123]
export async function activate(context: vscode.ExtensionContext): Promise<void> {
const resourceDiagnostics = vscode.languages.createDiagnosticCollection(
localize('AWS.explorerNode.resources.label', 'Resources')
)
const resourceManager = globals.resourceManager
context.subscriptions.push(
vscode.workspace.registerTextDocumentContentProvider('awsResource', new VirtualDocumentProvider()),
vscode.commands.registerCommand('aws.resources.openResourcePreview', async (node: ResourceNode) => {
await openResource({
source: node,
preview: true,
resourceManager,
diagnostics: resourceDiagnostics,
})
}),
vscode.commands.registerCommand('aws.resources.copyIdentifier', async (node: ResourceNode) => {
await copyIdentifier(node.parent.typeName, node.identifier)
}),
vscode.commands.registerCommand('aws.resources.configure', async (node: ResourcesNode) => {
if (await configureResources()) {
node.refresh()
}
}),
vscode.commands.registerCommand('aws.resources.createResource', async (node: ResourceTypeNode) => {
await resourceManager.new(node)
}),
vscode.commands.registerCommand('aws.resources.deleteResource', async (node: ResourceNode) => {
if (await deleteResource(node.parent.cloudControl, node.parent.typeName, node.identifier)) {
await resourceManager.close(resourceManager.toUri(node)!)
node.parent.clearChildren()
node.parent.refresh()
}
}),
vscode.commands.registerCommand('aws.resources.updateResource', async (node: ResourceNode) => {
await openResource({
source: node,
preview: false,
resourceManager,
diagnostics: resourceDiagnostics,
})
}),
vscode.commands.registerCommand('aws.resources.updateResourceInline', async (uri: vscode.Uri) => {
await openResource({
source: uri,
preview: false,
resourceManager,
diagnostics: resourceDiagnostics,
})
}),
vscode.workspace.onDidSaveTextDocument(async (doc: vscode.TextDocument) => {
return await saveResource(doc, resourceManager, resourceDiagnostics)
}),
vscode.commands.registerCommand('aws.resources.saveResource', async (uri: vscode.Uri) => {
await vscode.window.showTextDocument(uri)
await vscode.commands.executeCommand('workbench.action.files.save')
}),
vscode.commands.registerCommand('aws.resources.closeResource', async (uri: vscode.Uri) => {
if (resourceManager.fromUri(uri) instanceof ResourceNode) {
await openResource({
source: uri,
preview: true,
resourceManager,
diagnostics: resourceDiagnostics,
})
resourceDiagnostics.delete(uri)
} else {
await resourceManager.close(uri)
}
}),
vscode.commands.registerCommand('aws.resources.viewDocs', async (node: ResourceTypeNode) => {
await vscode.env.openExternal(vscode.Uri.parse(node.metadata.documentation))
}),
vscode.workspace.onDidChangeTextDocument(textDocumentEvent => {
if (resourceDiagnostics.has(textDocumentEvent.document.uri)) {
let diagnostics: vscode.Diagnostic[] = []
const resource = resourceManager.fromUri(textDocumentEvent.document.uri)
if (resource instanceof ResourceNode) {
const schema = resourceManager.getSchema(resource.parent.typeName)
if (schema) {
diagnostics = getDiagnostics(schema, textDocumentEvent.document)
}
}
resourceDiagnostics.set(textDocumentEvent.document.uri, diagnostics)
}
}),
vscode.workspace.onDidCloseTextDocument(closeDocumentEvent => {
resourceManager.close(closeDocumentEvent.uri, true)
}),
vscode.languages.registerCodeLensProvider(
{
language: 'json',
scheme: 'file',
pattern: RESOURCE_FILE_GLOB_PATTERN,
},
new ResourceCodeLensProvider(resourceManager)
)
)
}