UNPKG

atom-languageclient

Version:
106 lines 14.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const languageclient_1 = require("../languageclient"); /** Public: Adapts Atom's user notifications to those of the language server protocol. */ class NotificationsAdapter { /** Public: Attach to a {LanguageClientConnection} to recieve events indicating when user notifications should be displayed. */ static attach(connection, name, projectPath) { connection.onShowMessage((m) => NotificationsAdapter.onShowMessage(m, name, projectPath)); connection.onShowMessageRequest((m) => NotificationsAdapter.onShowMessageRequest(m, name, projectPath)); } /** * Public: Show a notification message with buttons using the Atom notifications API. * * @param params The {ShowMessageRequestParams} received from the language server indicating the details of the * notification to be displayed. * @param name The name of the language server so the user can identify the context of the message. * @param projectPath The path of the current project. */ static onShowMessageRequest(params, name, projectPath) { return new Promise((resolve, _reject) => { const options = { dismissable: true, detail: `${name} ${projectPath}`, }; if (params.actions) { options.buttons = params.actions.map((a) => ({ text: a.title, onDidClick: () => { resolve(a); if (notification != null) { notification.dismiss(); } }, })); } const notification = addNotificationForMessage(params.type, params.message, options); if (notification != null) { notification.onDidDismiss(() => { resolve(null); }); } }); } /** * Public: Show a notification message using the Atom notifications API. * * @param params The {ShowMessageParams} received from the language server indicating the details of the notification * to be displayed. * @param name The name of the language server so the user can identify the context of the message. * @param projectPath The path of the current project. */ static onShowMessage(params, name, projectPath) { addNotificationForMessage(params.type, params.message, { dismissable: true, detail: `${name} ${projectPath}`, }); } /** * Public: Convert a {MessageActionItem} from the language server into an equivalent {NotificationButton} within Atom. * * @param actionItem The {MessageActionItem} to be converted. * @returns A {NotificationButton} equivalent to the {MessageActionItem} given. */ static actionItemToNotificationButton(actionItem) { return { text: actionItem.title, }; } } exports.default = NotificationsAdapter; function messageTypeToString(messageType) { switch (messageType) { case languageclient_1.MessageType.Error: return "error"; case languageclient_1.MessageType.Warning: return "warning"; default: return "info"; } } function addNotificationForMessage(messageType, message, options) { function isDuplicate(note) { const noteDismissed = note.isDismissed && note.isDismissed(); const noteOptions = (note.getOptions && note.getOptions()) || {}; return (!noteDismissed && note.getType() === messageTypeToString(messageType) && note.getMessage() === message && noteOptions.detail === options.detail); } if (atom.notifications.getNotifications().some(isDuplicate)) { return null; } switch (messageType) { case languageclient_1.MessageType.Error: return atom.notifications.addError(message, options); case languageclient_1.MessageType.Warning: return atom.notifications.addWarning(message, options); case languageclient_1.MessageType.Log: // console.log(params.message); return null; case languageclient_1.MessageType.Info: default: return atom.notifications.addInfo(message, options); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy1hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2FkYXB0ZXJzL25vdGlmaWNhdGlvbnMtYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNEQU0wQjtBQU8xQix5RkFBeUY7QUFDekYsTUFBcUIsb0JBQW9CO0lBQ3ZDLCtIQUErSDtJQUN4SCxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQW9DLEVBQUUsSUFBWSxFQUFFLFdBQW1CO1FBQzFGLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUE7UUFDekYsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUE7SUFDekcsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsb0JBQW9CLENBQ2hDLE1BQWdDLEVBQ2hDLElBQVksRUFDWixXQUFtQjtRQUVuQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3RDLE1BQU0sT0FBTyxHQUF3QjtnQkFDbkMsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE1BQU0sRUFBRSxHQUFHLElBQUksSUFBSSxXQUFXLEVBQUU7YUFDakMsQ0FBQTtZQUNELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDbEIsT0FBTyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDM0MsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLO29CQUNiLFVBQVUsRUFBRSxHQUFHLEVBQUU7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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTGFuZ3VhZ2VDbGllbnRDb25uZWN0aW9uLFxuICBNZXNzYWdlVHlwZSxcbiAgTWVzc2FnZUFjdGlvbkl0ZW0sXG4gIFNob3dNZXNzYWdlUGFyYW1zLFxuICBTaG93TWVzc2FnZVJlcXVlc3RQYXJhbXMsXG59IGZyb20gXCIuLi9sYW5ndWFnZWNsaWVudFwiXG5pbXBvcnQgeyBOb3RpZmljYXRpb24sIE5vdGlmaWNhdGlvbk9wdGlvbnMgfSBmcm9tIFwiYXRvbVwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uQnV0dG9uIHtcbiAgdGV4dDogc3RyaW5nXG59XG5cbi8qKiBQdWJsaWM6IEFkYXB0cyBBdG9tJ3MgdXNlciBub3RpZmljYXRpb25zIHRvIHRob3NlIG9mIHRoZSBsYW5ndWFnZSBzZXJ2ZXIgcHJvdG9jb2wuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb3RpZmljYXRpb25zQWRhcHRlciB7XG4gIC8qKiBQdWJsaWM6IEF0dGFjaCB0byBhIHtMYW5ndWFnZUNsaWVudENvbm5lY3Rpb259IHRvIHJlY2lldmUgZXZlbnRzIGluZGljYXRpbmcgd2hlbiB1c2VyIG5vdGlmaWNhdGlvbnMgc2hvdWxkIGJlIGRpc3BsYXllZC4gKi9cbiAgcHVibGljIHN0YXRpYyBhdHRhY2goY29ubmVjdGlvbjogTGFuZ3VhZ2VDbGllbnRDb25uZWN0aW9uLCBuYW1lOiBzdHJpbmcsIHByb2plY3RQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25uZWN0aW9uLm9uU2hvd01lc3NhZ2UoKG0pID0+IE5vdGlmaWNhdGlvbnNBZGFwdGVyLm9uU2hvd01lc3NhZ2UobSwgbmFtZSwgcHJvamVjdFBhdGgpKVxuICAgIGNvbm5lY3Rpb24ub25TaG93TWVzc2FnZVJlcXVlc3QoKG0pID0+IE5vdGlmaWNhdGlvbnNBZGFwdGVyLm9uU2hvd01lc3NhZ2VSZXF1ZXN0KG0sIG5hbWUsIHByb2plY3RQYXRoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaWM6IFNob3cgYSBub3RpZmljYXRpb24gbWVzc2FnZSB3aXRoIGJ1dHRvbnMgdXNpbmcgdGhlIEF0b20gbm90aWZpY2F0aW9ucyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgVGhlIHtTaG93TWVzc2FnZVJlcXVlc3RQYXJhbXN9IHJlY2VpdmVkIGZyb20gdGhlIGxhbmd1YWdlIHNlcnZlciBpbmRpY2F0aW5nIHRoZSBkZXRhaWxzIG9mIHRoZVxuICAgKiAgIG5vdGlmaWNhdGlvbiB0byBiZSBkaXNwbGF5ZWQuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZSBzZXJ2ZXIgc28gdGhlIHVzZXIgY2FuIGlkZW50aWZ5IHRoZSBjb250ZXh0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gcHJvamVjdFBhdGggVGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb25TaG93TWVzc2FnZVJlcXVlc3QoXG4gICAgcGFyYW1zOiBTaG93TWVzc2FnZVJlcXVlc3RQYXJhbXMsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHByb2plY3RQYXRoOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxNZXNzYWdlQWN0aW9uSXRlbSB8IG51bGw+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnM6IE5vdGlmaWNhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIGRpc21pc3NhYmxlOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IGAke25hbWV9ICR7cHJvamVjdFBhdGh9YCxcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMuYWN0aW9ucykge1xuICAgICAgICBvcHRpb25zLmJ1dHRvbnMgPSBwYXJhbXMuYWN0aW9ucy5tYXAoKGEpID0+ICh7XG4gICAgICAgICAgdGV4dDogYS50aXRsZSxcbiAgICAgICAgICBvbkRpZENsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGEpXG4gICAgICAgICAgICBpZiAobm90aWZpY2F0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLmRpc21pc3MoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub3RpZmljYXRpb24gPSBhZGROb3RpZmljYXRpb25Gb3JNZXNzYWdlKHBhcmFtcy50eXBlLCBwYXJhbXMubWVzc2FnZSwgb3B0aW9ucylcblxuICAgICAgaWYgKG5vdGlmaWNhdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIG5vdGlmaWNhdGlvbi5vbkRpZERpc21pc3MoKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFB1YmxpYzogU2hvdyBhIG5vdGlmaWNhdGlvbiBtZXNzYWdlIHVzaW5nIHRoZSBBdG9tIG5vdGlmaWNhdGlvbnMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIFRoZSB7U2hvd01lc3NhZ2VQYXJhbXN9IHJlY2VpdmVkIGZyb20gdGhlIGxhbmd1YWdlIHNlcnZlciBpbmRpY2F0aW5nIHRoZSBkZXRhaWxzIG9mIHRoZSBub3RpZmljYXRpb25cbiAgICogICB0byBiZSBkaXNwbGF5ZWQuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZSBzZXJ2ZXIgc28gdGhlIHVzZXIgY2FuIGlkZW50aWZ5IHRoZSBjb250ZXh0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gcHJvamVjdFBhdGggVGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb25TaG93TWVzc2FnZShwYXJhbXM6IFNob3dNZXNzYWdlUGFyYW1zLCBuYW1lOiBzdHJpbmcsIHByb2plY3RQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBhZGROb3RpZmljYXRpb25Gb3JNZXNzYWdlKHBhcmFtcy50eXBlLCBwYXJhbXMubWVzc2FnZSwge1xuICAgICAgZGlzbWlzc2FibGU6IHRydWUsXG4gICAgICBkZXRhaWw6IGAke25hbWV9ICR7cHJvamVjdFBhdGh9YCxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFB1YmxpYzogQ29udmVydCBhIHtNZXNzYWdlQWN0aW9uSXRlbX0gZnJvbSB0aGUgbGFuZ3VhZ2Ugc2VydmVyIGludG8gYW4gZXF1aXZhbGVudCB7Tm90aWZpY2F0aW9uQnV0dG9ufSB3aXRoaW4gQXRvbS5cbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbkl0ZW0gVGhlIHtNZXNzYWdlQWN0aW9uSXRlbX0gdG8gYmUgY29udmVydGVkLlxuICAgKiBAcmV0dXJucyBBIHtOb3RpZmljYXRpb25CdXR0b259IGVxdWl2YWxlbnQgdG8gdGhlIHtNZXNzYWdlQWN0aW9uSXRlbX0gZ2l2ZW4uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFjdGlvbkl0ZW1Ub05vdGlmaWNhdGlvbkJ1dHRvbihhY3Rpb25JdGVtOiBNZXNzYWdlQWN0aW9uSXRlbSk6IE5vdGlmaWNhdGlvbkJ1dHRvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQ6IGFjdGlvbkl0ZW0udGl0bGUsXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlVG9TdHJpbmcobWVzc2FnZVR5cGU6IG51bWJlcik6IHN0cmluZyB7XG4gIHN3aXRjaCAobWVzc2FnZVR5cGUpIHtcbiAgICBjYXNlIE1lc3NhZ2VUeXBlLkVycm9yOlxuICAgICAgcmV0dXJuIFwiZXJyb3JcIlxuICAgIGNhc2UgTWVzc2FnZVR5cGUuV2FybmluZzpcbiAgICAgIHJldHVybiBcIndhcm5pbmdcIlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJpbmZvXCJcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGROb3RpZmljYXRpb25Gb3JNZXNzYWdlKFxuICBtZXNzYWdlVHlwZTogbnVtYmVyLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IE5vdGlmaWNhdGlvbk9wdGlvbnNcbik6IE5vdGlmaWNhdGlvbiB8IG51bGwge1xuICBmdW5jdGlvbiBpc0R1cGxpY2F0ZShub3RlOiBOb3RpZmljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBub3RlRGlzbWlzc2VkID0gbm90ZS5pc0Rpc21pc3NlZCAmJiBub3RlLmlzRGlzbWlzc2VkKClcbiAgICBjb25zdCBub3RlT3B0aW9ucyA9IChub3RlLmdldE9wdGlvbnMgJiYgbm90ZS5nZXRPcHRpb25zKCkpIHx8IHt9XG4gICAgcmV0dXJuIChcbiAgICAgICFub3RlRGlzbWlzc2VkICYmXG4gICAgICBub3RlLmdldFR5cGUoKSA9PT0gbWVzc2FnZVR5cGVUb1N0cmluZyhtZXNzYWdlVHlwZSkgJiZcbiAgICAgIG5vdGUuZ2V0TWVzc2FnZSgpID09PSBtZXNzYWdlICYmXG4gICAgICBub3RlT3B0aW9ucy5kZXRhaWwgPT09IG9wdGlvbnMuZGV0YWlsXG4gICAgKVxuICB9XG4gIGlmIChhdG9tLm5vdGlmaWNhdGlvbnMuZ2V0Tm90aWZpY2F0aW9ucygpLnNvbWUoaXNEdXBsaWNhdGUpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHN3aXRjaCAobWVzc2FnZVR5cGUpIHtcbiAgICBjYXNlIE1lc3NhZ2VUeXBlLkVycm9yOlxuICAgICAgcmV0dXJuIGF0b20ubm90aWZpY2F0aW9ucy5hZGRFcnJvcihtZXNzYWdlLCBvcHRpb25zKVxuICAgIGNhc2UgTWVzc2FnZVR5cGUuV2FybmluZzpcbiAgICAgIHJldHVybiBhdG9tLm5vdGlmaWNhdGlvbnMuYWRkV2FybmluZyhtZXNzYWdlLCBvcHRpb25zKVxuICAgIGNhc2UgTWVzc2FnZVR5cGUuTG9nOlxuICAgICAgLy8gY29uc29sZS5sb2cocGFyYW1zLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIG51bGxcbiAgICBjYXNlIE1lc3NhZ2VUeXBlLkluZm86XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBhdG9tLm5vdGlmaWNhdGlvbnMuYWRkSW5mbyhtZXNzYWdlLCBvcHRpb25zKVxuICB9XG59XG4iXX0=