async provideCompletionItems()

in src/extension.js [182:240]


    async provideCompletionItems(document, position, token, context) {
      const line = document.lineAt(position).text.trim();

      if (!line.startsWith('aliyun')) {
        return;
      }

      if (line === 'aliyun configure') {
        return [
          new vscode.CompletionItem('get', vscode.CompletionItemKind.Function),
          new vscode.CompletionItem('set', vscode.CompletionItemKind.Function),
          new vscode.CompletionItem('list', vscode.CompletionItemKind.Function),
          new vscode.CompletionItem('delete', vscode.CompletionItemKind.Function),
        ];
      }

      const parts = line.split(' ');

      if (parts.length === 2) {
        const [, subcommand] = parts;
        if (subcommand === 'configure') {
          return [
            new vscode.CompletionItem('get', vscode.CompletionItemKind.Function),
            new vscode.CompletionItem('set', vscode.CompletionItemKind.Function),
            new vscode.CompletionItem('list', vscode.CompletionItemKind.Function),
            new vscode.CompletionItem('delete', vscode.CompletionItemKind.Function),
          ];
        }

        return [
          ...metadata.getApis(subcommand, getLocale()).map((d) => {
            const item = new vscode.CompletionItem(d, vscode.CompletionItemKind.Function);
            item.insertText = `${item.label} `;
            return item;
          })
        ];
      }

      if (line === 'aliyun') {

        return [
          new vscode.CompletionItem({label: 'help', description: ''}, vscode.CompletionItemKind.Function),
          new vscode.CompletionItem('version', vscode.CompletionItemKind.Function),
          new vscode.CompletionItem('configure', vscode.CompletionItemKind.Module),
          new vscode.CompletionItem({label: 'oss', description: 'Object Storage Service'}, vscode.CompletionItemKind.Module),
          ...metadata.getProducts(getLocale()).map((d) => {
            const label = {
              label: d.code.toLowerCase(),
              description: locale === 'en-US' ? d.name.en : d.name.zh
            };
            const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Module);
            item.insertText = `${label.label} `;
            return item;
          })
        ];
      }

      return [];
    }