diff --git a/lib/main.js b/lib/main.js
index 72e089e..828b32f 100644
--- a/lib/main.js
+++ b/lib/main.js
@@ -1,5 +1,3 @@
-// @ts-check
-///
'use babel';
const { CompositeDisposable, Disposable } = require('atom');
@@ -25,7 +23,11 @@ module.exports = {
if (!this.signatureHelpManager) this.signatureHelpManager = new SignatureHelpManager();
this.subscriptions.add(this.signatureHelpManager);
- this.signatureHelpManager.initialize();
+
+ require('atom-package-deps').install('atom-ide-signature-help')
+ .then(function() {
+ console.log('All dependencies installed, good to go')
+ });
},
deactivate() {
@@ -43,5 +45,9 @@ module.exports = {
return (provider) => {
return this.signatureHelpManager.addProvider(provider);
}
+ },
+
+ consumeMarkdownRenderer(renderer) {
+ this.signatureHelpManager.initialize(renderer);
}
};
diff --git a/lib/signature-help-manager.js b/lib/signature-help-manager.js
index 4d45c9c..583a834 100644
--- a/lib/signature-help-manager.js
+++ b/lib/signature-help-manager.js
@@ -1,5 +1,3 @@
-// @ts-check
-///
'use babel';
const { CompositeDisposable, Disposable, Point, Range, TextEditor } = require('atom');
@@ -49,12 +47,15 @@ module.exports = class SignatureHelpManager {
* @type {Boolean}
*/
this.showSignatureHelpOnTyping = false;
+
+ this.renderer = null;
}
- initialize() {
+ initialize(renderer) {
this.subscriptions = new CompositeDisposable();
this.providerRegistry = new ProviderRegistry();
this.watchedEditors = new WeakSet();
+ this.renderer = renderer;
this.subscriptions.add(
atom.workspace.observeTextEditors(editor => {
@@ -121,9 +122,9 @@ module.exports = class SignatureHelpManager {
if (editorView.hasFocus()) {
this.updateCurrentEditor(editor);
}
- let focusListener = (element) => this.updateCurrentEditor(editor);
+ let focusListener = () => this.updateCurrentEditor(editor);
editorView.addEventListener('focus', focusListener);
- let blurListener = (element) => this.hideDataTip();
+ let blurListener = () => this.hideDataTip();
editorView.addEventListener('blur', blurListener);
let disposable = new Disposable(() => {
@@ -225,11 +226,27 @@ module.exports = class SignatureHelpManager {
if ((result === null) || (result.signatures.length === 0)) { return; }
+ console.log(result);
+
const index = result.activeSignature || 0;
const signature = result.signatures[index];
- const signatureHelpView = new SignatureHelpView({ signature: signature, grammar: editor.getGrammar() });
- this.signatureHelpDisposables = this.mountSignatureHelp(editor, position, signatureHelpView);
- })
+
+ let markedString = new Array();
+ markedString.push(`
${signature.label}
`);
+
+ if (signature.documentation) {
+ const markdownDoc = signature.documentation.kind ? signature.documentation.value : signature.documentation;
+ markedString.push(markdownDoc);
+ }
+
+ const s = markedString.join('\r\n');
+ this.renderer.render(s).then((html) => {
+ const signatureHelpView = new SignatureHelpView({ htmlView: html });
+ this.signatureHelpDisposables = this.mountSignatureHelp(editor, position, signatureHelpView);
+ }).catch((err) => console.log(err));
+ });
+
+ console.log()
}
/**
@@ -241,7 +258,6 @@ module.exports = class SignatureHelpManager {
*/
mountSignatureHelp(editor, position, view) {
let disposables = new CompositeDisposable();
-
const overlayMarker = editor.markBufferRange(new Range(position, position), {
invalidate: 'never',
});
@@ -254,7 +270,7 @@ module.exports = class SignatureHelpManager {
});
view.element.style.display = 'block';
- // move box above the current editing line
+ // move box above the current editing line
setTimeout(() => {
view.element.style.bottom = editor.getLineHeightInPixels() + view.element.getBoundingClientRect().height + 'px';
}, 100);
diff --git a/lib/signature-help-view.js b/lib/signature-help-view.js
index 2ebeaa7..31491ce 100644
--- a/lib/signature-help-view.js
+++ b/lib/signature-help-view.js
@@ -1,101 +1,22 @@
'use babel';
/** @jsx etch.dom */
-const etch = require('etch')
-const marked = require('marked')
-const createDOMPurify = require('dompurify')
+const ReactDOMServer = require('react-dom/server');
+const etch = require('etch');
+const createDOMPurify = require('dompurify');
/**
* [domPurify description]
* @type {DOMPurify}
*/
const domPurify = createDOMPurify();
-class SnippetView {
- constructor({ snippet, grammar }) {
- this.rootElement = document.createElement("div");
- this.rootElement.className = "datatip-container";
- if (snippet) {
- this.refreshRootElement(snippet, grammar);
- }
- }
-
- update({ snippet, grammar }) {
- this.refreshRootElement(snippet, grammar);
- }
-
- refreshRootElement(snippet, grammar) {
- const wrapper = document.createElement("div");
- wrapper.className = "datatip-marked-text-editor";
- if (snippet) {
- const regExpLSPPrefix = /^\((method|property|parameter)\)\W/;
- snippet = snippet.replace(regExpLSPPrefix, '');
- if (grammar) {
- const atomElem = atom.workspace.buildTextEditor({
- lineNumberGutterVisible: false,
- readonly: true,
- keyboardInputEnabled: false,
- showInvisibles: false,
- tabLength: atom.config.get("editor.tabLength")
- });
- atomElem.setGrammar(grammar);
- atomElem.setText(snippet);
- const atomView = atom.views.getView(atomElem);
- atomView.setUpdatedSynchronously(true);
- atomView.style.pointerEvents = "none"
- atomView.style.position = "absolute";
- atomView.style.width = "0px";
- atomView.style.height = "1px";
- atom.views.getView(atom.workspace).appendChild(atomView);
- this.editorTokenized(atomElem).then(() => {
- const html = Array.from(atomView.querySelectorAll(".line:not(.dummy)"));
- wrapper.innerHTML = domPurify.sanitize(html.map(x => x.innerHTML).join("\n"), { breaks: true });
- atomView.remove();
- }).catch(() => {
- atomView.remove();
- })
- }
- }
- this.rootElement.appendChild(wrapper);
- }
-
- get element() {
- return this.rootElement;
- }
-
- /**
- * [editorTokenized description]
- * @param {TextEditor} editor [description]
- * @return {Promise} [description]
- */
- editorTokenized(editor) {
- return new Promise(resolve => {
- if (editor.getBuffer().getLanguageMode().fullyTokenized) {
- resolve()
- } else {
- const disp = editor.onDidTokenize(() => {
- disp.dispose()
- resolve()
- })
- }
- })
- }
-}
-
-class MarkdownView {
- constructor({ markedString }) {
- this.markedString = markedString;
+class HtmlView {
+ constructor({ html }) {
this.rootElement = document.createElement('div');
this.rootElement.className = "datatip-marked-container";
this.rootElement.addEventListener("wheel", this.onMouseWheel, { passive: true });
-
- if (this.markedString) {
- this.rootElement.innerHTML = domPurify.sanitize(marked(this.markedString, { breaks: true }));
- }
- }
- update({ markedString }) {
- this.markedString = markedString;
- if (this.markedString) {
- this.rootElement.innerHTML = domPurify.sanitize(marked(this.markedString, { breaks: true }));
+ if (html){
+ this.rootElement.innerHTML = domPurify.sanitize(html);
}
}
@@ -112,6 +33,19 @@ class MarkdownView {
}
}
+class ReactView {
+ constructor({ component }) {
+ this.rootElement = document.createElement('span')
+ if (component) {
+ this.rootElement.innerHTML = domPurify.sanitize(ReactDOMServer.renderToStaticMarkup(component()))
+ }
+ }
+
+ get element() {
+ return this.rootElement
+ }
+}
+
module.exports = class SignatureHelpView {
// Required: Define an ordinary constructor to initialize your component.
constructor(properties) {
@@ -120,13 +54,27 @@ module.exports = class SignatureHelpView {
}
render() {
- const documentation = this.properties.signature.documentation.value || this.properties.signature.documentation || null;
- return (
-
-
-
-
- );
+ if (this.properties.reactView) {
+ return (
+
+
+
+ );
+ }
+ else if (this.properties.htmlView) {
+ return (
+
+
+
+ );
+ }
+ else {
+ return (
+
+ { this.children }
+
+ );
+ }
}
update(props, children) {
diff --git a/package-lock.json b/package-lock.json
index 3603ee5..c1fb7b5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3749,12 +3749,6 @@
"@types/node": "*"
}
},
- "@types/marked": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.6.0.tgz",
- "integrity": "sha512-TxwhgR9VsIfRDJ3WwFokG8Xu+ea0nYGDRHdI783WJ983uffatz0ytIeUEIBOwPvRy241KRSNVyywQltuTqDh0w==",
- "dev": true
- },
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@@ -3768,15 +3762,15 @@
"dev": true
},
"@types/prop-types": {
- "version": "15.5.8",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.8.tgz",
- "integrity": "sha512-3AQoUxQcQtLHsK25wtTWIoIpgYjH3vSDroZOUr7PpCHw/jLY1RB9z9E8dBT/OSmwStVgkRNvdh+ZHNiomRieaw==",
+ "version": "15.7.0",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.0.tgz",
+ "integrity": "sha512-eItQyV43bj4rR3JPV0Skpl1SncRCdziTEK9/v8VwXmV6d/qOUO8/EuWeHBbCZcsfSHfzI5UyMJLCSXtxxznyZg==",
"dev": true
},
"@types/react": {
- "version": "16.7.21",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-16.7.21.tgz",
- "integrity": "sha512-8BPxwygC83LgaIjOVVLrzB4mpP2u1ih01fbfy76L3h9OgKN+fNyMVPXj/0mGpWnxImjiM/2lqb3YOeT2Ca+NYQ==",
+ "version": "16.8.8",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.8.tgz",
+ "integrity": "sha512-xwEvyet96u7WnB96kqY0yY7qxx/pEpU51QeACkKFtrgjjXITQn0oO1iwPEraXVgh10ZFPix7gs1R4OJXF7P5sg==",
"dev": true,
"requires": {
"@types/prop-types": "*",
@@ -3784,9 +3778,9 @@
}
},
"@types/react-dom": {
- "version": "16.0.11",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.11.tgz",
- "integrity": "sha512-x6zUx9/42B5Kl2Vl9HlopV8JF64wLpX3c+Pst9kc1HgzrsH+mkehe/zmHMQTplIrR48H2gpU7ZqurQolYu8XBA==",
+ "version": "16.8.2",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.8.2.tgz",
+ "integrity": "sha512-MX7n1wq3G/De15RGAAqnmidzhr2Y9O/ClxPxyqaNg96pGyeXUYPSvujgzEVpLo9oIP4Wn1UETl+rxTN02KEpBw==",
"dev": true,
"requires": {
"@types/react": "*"
@@ -3953,6 +3947,15 @@
"vscode-languageserver-types": "3.12.0"
}
},
+ "atom-package-deps": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/atom-package-deps/-/atom-package-deps-5.0.0.tgz",
+ "integrity": "sha512-C5Z2V68GuZvuLowrqQ8O8+BE8P4Elhxuc6eZiZ0770CH2e2R/Ausz5VebbDxVOSedFwAaz3CzQJYHayqZ5wKQg==",
+ "requires": {
+ "sb-fs": "^3.0.0",
+ "semver": "^5.6.0"
+ }
+ },
"babel-polyfill": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
@@ -4246,6 +4249,18 @@
"string-width": "^2.1.1",
"strip-ansi": "^4.0.0",
"wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ }
}
},
"code-point-at": {
@@ -4458,9 +4473,9 @@
}
},
"csstype": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.1.tgz",
- "integrity": "sha512-wv7IRqCGsL7WGKB8gPvrl+++HlFM9kxAM6jL1EXNPNTshEJYilMkbfS2SnuHha77uosp/YVK0wAp2jmlBzn1tg==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.3.tgz",
+ "integrity": "sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg==",
"dev": true
},
"currently-unhandled": {
@@ -4595,9 +4610,9 @@
}
},
"dompurify": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-1.0.8.tgz",
- "integrity": "sha512-vetRFbN1SXSPfP3ClIiYnxTrXquSqakBEOoB5JESn0SVcSYzpu6ougjakpKnskGctYdlNpwf+riUHSkG7d4XUw=="
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-1.0.10.tgz",
+ "integrity": "sha512-huhl3DSWX5LaA7jDtnj3XQdJgWW1wYouNW7N0drGzQa4vEUSVWyeFN+Atx6HP4r5cang6oQytMom6I4yhGJj5g=="
},
"dot-prop": {
"version": "3.0.0",
@@ -4617,6 +4632,12 @@
"readable-stream": "^2.0.2"
}
},
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
"end-of-stream": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
@@ -4989,9 +5010,9 @@
"dev": true
},
"get-caller-file": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
},
"get-stdin": {
@@ -5665,6 +5686,11 @@
"text-extensions": "^1.0.0"
}
},
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
@@ -5708,6 +5734,11 @@
"integrity": "sha512-CpKJh9VRNhS+XqZtg1UMejETGEiqwCGDC/uwPEEQwc2nfdbSm73SIE29TplG2gLYuBOOTNDqxzG6A9NtEPLt0w==",
"dev": true
},
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
"js-yaml": {
"version": "3.12.2",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz",
@@ -5867,6 +5898,14 @@
"integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=",
"dev": true
},
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
"loud-rejection": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
@@ -5924,9 +5963,10 @@
}
},
"marked": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.0.tgz",
- "integrity": "sha512-HduzIW2xApSXKXJSpCipSxKyvMbwRRa/TwMbepmlZziKdH8548WSoDP4SxzulEKjlo8BE39l+2fwJZuRKOln6g=="
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.1.tgz",
+ "integrity": "sha512-+H0L3ibcWhAZE02SKMqmvYsErLo4EAVJxu5h3bHBBDvvjeWXtl92rGUSBYHL2++5Y+RSNgl8dYOAXcYe7lp1fA==",
+ "dev": true
},
"marked-terminal": {
"version": "3.2.0",
@@ -5956,13 +5996,13 @@
}
},
"mem": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz",
- "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz",
+ "integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==",
"dev": true,
"requires": {
"map-age-cleaner": "^0.1.1",
- "mimic-fn": "^1.0.0",
+ "mimic-fn": "^2.0.0",
"p-is-promise": "^2.0.0"
}
},
@@ -6017,9 +6057,9 @@
"dev": true
},
"mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz",
+ "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==",
"dev": true
},
"minimatch": {
@@ -9633,6 +9673,11 @@
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
"dev": true
},
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
"object-copy": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
@@ -10014,6 +10059,16 @@
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true
},
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ }
+ },
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
@@ -10054,6 +10109,33 @@
"strip-json-comments": "~2.0.1"
}
},
+ "react": {
+ "version": "16.8.4",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.8.4.tgz",
+ "integrity": "sha512-0GQ6gFXfUH7aZcjGVymlPOASTuSjlQL4ZtVC5YKH+3JL6bBLCVO21DknzmaPlI90LN253ojj02nsapy+j7wIjg==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2",
+ "scheduler": "^0.13.4"
+ }
+ },
+ "react-dom": {
+ "version": "16.8.4",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.4.tgz",
+ "integrity": "sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2",
+ "scheduler": "^0.13.4"
+ }
+ },
+ "react-is": {
+ "version": "16.8.4",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.4.tgz",
+ "integrity": "sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA=="
+ },
"read-pkg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
@@ -10160,9 +10242,9 @@
"dev": true
},
"require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true
},
"resolve": {
@@ -10254,10 +10336,33 @@
"ret": "~0.1.10"
}
},
+ "sb-fs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/sb-fs/-/sb-fs-3.0.0.tgz",
+ "integrity": "sha1-+9zdMBDoChuOJ0kM7zNgZJdCA7g=",
+ "requires": {
+ "sb-promisify": "^2.0.1",
+ "strip-bom-buf": "^1.0.0"
+ }
+ },
+ "sb-promisify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/sb-promisify/-/sb-promisify-2.0.2.tgz",
+ "integrity": "sha1-QnelR1RIiqlnXYhuNU24lMm9yYE="
+ },
+ "scheduler": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.4.tgz",
+ "integrity": "sha512-cvSOlRPxOHs5dAhP9yiS/6IDmVAVxmk33f0CtTJRkmUWcb1Us+t7b1wqdzoC0REw2muC9V5f1L/w5R5uKGaepA==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ },
"semantic-release": {
- "version": "15.13.3",
- "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-15.13.3.tgz",
- "integrity": "sha512-cax0xPPTtsxHlrty2HxhPql2TTvS74Ni2O8BzwFHxNY/mviVKEhI4OxHzBYJkpVxx1fMVj36+oH7IlP+SJtPNA==",
+ "version": "15.13.7",
+ "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-15.13.7.tgz",
+ "integrity": "sha512-5O+MulYrnjNOs3F0y5XQoyWqURGsR1w7R5sa/zOktsFHeJ0g1Cb2O4CIpKzkeBxVWXuPXhIuKrAw3dhHbE/gLQ==",
"dev": true,
"requires": {
"@semantic-release/commit-analyzer": "^6.1.0",
@@ -10272,20 +10377,20 @@
"execa": "^1.0.0",
"figures": "^2.0.0",
"find-versions": "^3.0.0",
- "get-stream": "^4.0.0",
+ "get-stream": "^5.0.0",
"git-log-parser": "^1.2.0",
"hook-std": "^1.1.0",
"hosted-git-info": "^2.7.1",
"lodash": "^4.17.4",
"marked": "^0.6.0",
"marked-terminal": "^3.2.0",
- "p-locate": "^3.0.0",
- "p-reduce": "^1.0.0",
+ "p-locate": "^4.0.0",
+ "p-reduce": "^2.0.0",
"read-pkg-up": "^4.0.0",
"resolve-from": "^4.0.0",
"semver": "^5.4.1",
"signale": "^1.2.1",
- "yargs": "^12.0.0"
+ "yargs": "^13.1.0"
},
"dependencies": {
"cosmiconfig": {
@@ -10327,6 +10432,17 @@
"p-finally": "^1.0.0",
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ }
}
},
"find-up": {
@@ -10339,9 +10455,9 @@
}
},
"get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.0.0.tgz",
+ "integrity": "sha512-frc9F97ehylll1YI31eJRw5M21M86GCItj5U3S3hOEUa6JG6LtcvRKYDAtV/9E5lVasY8QJSPVsrMg/mbCSP5w==",
"dev": true,
"requires": {
"pump": "^3.0.0"
@@ -10373,6 +10489,17 @@
"requires": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
+ },
+ "dependencies": {
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ }
}
},
"p-limit": {
@@ -10385,14 +10512,20 @@
}
},
"p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.0.0.tgz",
+ "integrity": "sha512-IvOiDT1hbCdrsFKKXs8AGjxouEfn9VVdz/edtT08IDr+RIn2U/o3Xx+Agx455+CkSRdomMs3EN5BgR2Q0LZX0g==",
"dev": true,
"requires": {
"p-limit": "^2.0.0"
}
},
+ "p-reduce": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.0.0.tgz",
+ "integrity": "sha512-VcNNEqiYIkRCGeUHELY5dUrnQHCRwL6eIH/L9oSbl/PsvyHQXD1ws/MFwuEb+6dgH/URCfROVUqOYL37eHi2kQ==",
+ "dev": true
+ },
"p-try": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
@@ -10414,8 +10547,7 @@
"semver": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
- "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
- "dev": true
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg=="
},
"semver-compare": {
"version": "1.0.0",
@@ -10759,13 +10891,31 @@
}
},
"string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
+ "emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
+ "strip-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz",
+ "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
}
},
"string_decoder": {
@@ -10792,6 +10942,14 @@
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
},
+ "strip-bom-buf": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz",
+ "integrity": "sha1-HLRar1dTD0yvhsf3UXnSyaUd1XI=",
+ "requires": {
+ "is-utf8": "^0.2.1"
+ }
+ },
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
@@ -11231,23 +11389,22 @@
"dev": true
},
"yargs": {
- "version": "12.0.5",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
- "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+ "version": "13.2.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz",
+ "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==",
"dev": true,
"requires": {
"cliui": "^4.0.0",
- "decamelize": "^1.2.0",
"find-up": "^3.0.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "os-locale": "^3.1.0",
"require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
+ "require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
+ "string-width": "^3.0.0",
"which-module": "^2.0.0",
- "y18n": "^3.2.1 || ^4.0.0",
- "yargs-parser": "^11.1.1"
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.0.0"
},
"dependencies": {
"camelcase": {
@@ -11300,9 +11457,9 @@
"dev": true
},
"yargs-parser": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
- "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz",
+ "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
diff --git a/package.json b/package.json
index 41b21e8..63df8f0 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
{
"name": "atom-ide-signature-help",
+ "main": "./lib/main.js",
"version": "0.2.0",
"description": "A replacement of the SignatureHelp functionality from the original Atom-IDE / Nuclide package developed by Facebook.",
- "main": "./lib/main.js",
"keywords": [
"atom-package",
"atom-ide",
@@ -13,10 +13,16 @@
"engines": {
"atom": ">=1.0.0 <2.0.0"
},
+ "package-deps": [
+ "atom-ide-markdown-service",
+ "busy-signal"
+ ],
"dependencies": {
- "dompurify": "^1.0.8",
+ "atom-package-deps": "^5.0.0",
+ "dompurify": "^1.0.10",
"etch": "^0.14.0",
- "marked": "^0.6.0"
+ "react": "^16.8.4",
+ "react-dom": "^16.8.4"
},
"devDependencies": {
"@commitlint/cli": "^7.5.2",
@@ -25,15 +31,14 @@
"@semantic-release/apm-config": "^6.0.1",
"@types/atom": "^1.31.1",
"@types/dompurify": "0.0.32",
- "@types/marked": "^0.6.0",
"@types/node": "^10.12.18",
- "@types/react": "^16.7.21",
- "@types/react-dom": "^16.0.11",
+ "@types/react": "^16.8.8",
+ "@types/react-dom": "^16.8.2",
"atom-languageclient": "^0.9.9",
"commitlint": "^7.5.2",
"husky": "^1.3.1",
"prettier": "1.16.4",
- "semantic-release": "^15.13.3"
+ "semantic-release": "^15.13.7"
},
"release": {
"extends": "@semantic-release/apm-config"
@@ -62,5 +67,12 @@
"0.1.0": "provideSignatureHelp"
}
}
+ },
+ "consumedServices": {
+ "markdown-renderer": {
+ "versions": {
+ "0.1.0": "consumeMarkdownRenderer"
+ }
+ }
}
}
diff --git a/styles/atom-ide-signature-help-marked.less b/styles/atom-ide-signature-help-marked.less
index 18ed63e..0ac3b2d 100644
--- a/styles/atom-ide-signature-help-marked.less
+++ b/styles/atom-ide-signature-help-marked.less
@@ -7,8 +7,8 @@
.datatip-marked-container {
color: @syntax-text-color;
- font-family: @font-family;
- max-height: 300px;
+ font-family: var(--editor-font-family);
+ font-size: max(var(--editor-font-size), 0.9rem);
max-width: 750px;
overflow: auto;
padding: 8px;
@@ -22,31 +22,8 @@
:last-child {
margin-bottom: 0;
}
-}
-
-.datatip-marked-text-editor-container {
- padding: 2px 0 2px 4px;
-}
-
-.datatip-marked-text-editor {
- max-width: 500px;
- max-height: 300px;
- overflow: auto;
-}
-
-.datatip-marked-text-editor atom-text-editor {
- background-color: transparent;
- min-width: 1em; // Hack to force the AtomTextEditor to properly size itself
-
- .editor-contents--private {
- cursor: inherit!important; // Let the enclosing datatip override the cursor.
- }
-
- // Prevent forced scroll bar in Atom 1.9.x
- .scroll-view .horizontal-scrollbar {
- display: none;
- }
- .scrollbar-corner {
- display: none;
+ pre {
+ font-family: var(--editor-font-family);
+ font-size: max(var(--editor-font-size), 0.9rem);
}
}
diff --git a/styles/atom-ide-signature-help.less b/styles/atom-ide-signature-help.less
index 03424ae..eb91193 100644
--- a/styles/atom-ide-signature-help.less
+++ b/styles/atom-ide-signature-help.less
@@ -5,11 +5,13 @@
background: @app-background-color;
box-shadow: 0px 1px 4px 0px rgba(0,0,0,1);
color: @syntax-text-color;
- font-family: Menlo, Monaco, Consolas, monospace;
+ font-size: 1rem; // some themes set font sizes on the root node
margin-top: -2px; // Compensate for shadow
position: relative;
white-space: normal;
pointer-events: all;
+ max-width: 800px;
+ overflow: none;
}
.datatip-overlay {
@@ -23,10 +25,12 @@
background-color: @syntax-background-color;
display: flex;
position: relative;
- max-width: 750px;
- padding-left: 5px;
- padding-right: 5px;
+ max-width: 800px;
transition: background-color 0.15s ease;
+ padding: 8px;
+ white-space: pre-wrap;
+ font-family: var(--editor-font-family);
+ font-size: max(var(--editor-font-size), 0.9rem);
&:hover {
background-color: mix(@syntax-background-color, @syntax-selection-color, 50%);
}
@@ -46,31 +50,8 @@
}
.datatip-marked-text-editor {
+ flex-grow: 1;
.cursors {
display: none;
}
}
-
-atom-text-editor {
-
- .datatip-highlight-region > .region {
- // Use a faded version of the cursor color so as to have a distinction when
- // overlapping with a selection (`@syntax-selection-color`). This element is
- // on top of the selection element, so that will show through.
- background: fade(@syntax-cursor-color, 10%);
- }
-
- .datatip-highlight-region-active > .region {
- // Animations such as `RotatingBackground` must be defined in a `*.atom-text-editor.less` file.
- animation: RotatingBackground 1s ease-in-out infinite reverse;
- background: linear-gradient(
- 90deg,
- @syntax-selection-color,
- @syntax-background-color,
- @syntax-selection-color,
- @syntax-background-color
- );
- background-size: 300% 100%;
- }
-
-}