Support sts/highlight message. Support "standalone" server for Atom

This commit is contained in:
BoykoAlex
2017-10-05 19:58:34 -04:00
parent 1975104519
commit b212e3b8ab
11 changed files with 146 additions and 20 deletions

View File

@@ -1,7 +1,11 @@
const path = require('path');
const { JarLanguageClient } = require('pivotal-atom-languageclient-commons');
const { JarLanguageClient, StsAdapter } = require('pivotal-atom-languageclient-commons');
const { Convert } = require('atom-languageclient');
const PROPERTIES = require('../properties.json');
const BOOT_DATA_MARKER_TYPE = 'BootApp-Hint';
const BOOT_HINT_GUTTER_NAME = 'boot-hint-gutter';
class BootJavaLanguageClient extends JarLanguageClient {
constructor() {
@@ -11,6 +15,7 @@ class BootJavaLanguageClient extends JarLanguageClient {
path.join(__dirname, '..', 'server'),
'boot-java-language-server.jar'
);
this.DEBUG = true;
}
getGrammarScopes() {
@@ -32,6 +37,28 @@ class BootJavaLanguageClient extends JarLanguageClient {
super.activate();
}
compatibleJavaVersion(javaExecutablePath) {
return super.compatibleJavaVersion(javaExecutablePath).then(version => {
this.fileExists(`${javaExecutablePath}/bin/${this.correctBinname('javac')}`).then(exists => {
if (!exists) {
const notification = atom.notifications.addWarning(`"Boot-Java" Package Functionality Limited`, {
dismissable: true,
detail: 'No JDK found',
description: 'JAVA_HOME environment variable does not point to JDK hence Boot Hints are unavailable',
buttons: [{
text: 'OK',
onDidClick: () => {
notification.dismiss()
},
}],
});
}
});
return version;
});
}
launchVmArgs(version) {
return [
'-Dorg.slf4j.simpleLogger.logFile=boot-java.log',
@@ -42,6 +69,59 @@ class BootJavaLanguageClient extends JarLanguageClient {
}
createStsAdapter() {
return new BootStsAdapter();
}
}
class BootStsAdapter extends StsAdapter {
constructor() {
super();
}
onHighlight(params) {
this.findEditors(params.doc.uri).forEach(editor => this.markHintsForEditor(editor, params.ranges));
}
markHintsForEditor(editor, ranges) {
editor.findMarkers(BOOT_DATA_MARKER_TYPE).forEach(m => m.destroy());
if (Array.isArray(ranges)) {
ranges.forEach(range => this.createHintMarker(editor, range));
}
const gutter = editor.gutterWithName(BOOT_HINT_GUTTER_NAME);
if (gutter) {
if (!ranges || !ranges.length) {
gutter.hide();
} else if (!gutter.isVisible()) {
gutter.show();
}
}
}
createHintMarker(editor, range) {
// Create marker model
const marker = editor.markBufferRange(Convert.lsRangeToAtomRange(range), BOOT_DATA_MARKER_TYPE);
// Marker around the text in the editor
editor.decorateMarker(marker, {
type: 'highlight',
class: 'boot-hint'
});
// Marker in the diagnostic gutter
let gutter = editor.gutterWithName(BOOT_HINT_GUTTER_NAME);
if (!gutter) {
gutter = editor.addGutter({
name: BOOT_HINT_GUTTER_NAME,
visible: false,
});
}
const iconElement = document.createElement('span');
iconElement.setAttribute('class', 'gutter-boot-hint');
gutter.decorateMarker(marker, {item: iconElement});
}
}
module.exports = new BootJavaLanguageClient();

View File

@@ -17,7 +17,7 @@
"dependencies": {
"atom-package-deps": "^4.6.0",
"download": "^6.2.5",
"pivotal-atom-languageclient-commons": "0.0.11"
"pivotal-atom-languageclient-commons": "0.0.12"
},
"devDependencies": {
"coffeelint": "^1.10.1"

Binary file not shown.

After

Width:  |  Height:  |  Size: 617 B

View File

@@ -0,0 +1,16 @@
.boot-hint .region {
border-color: #32BA56;
border-style: dotted;
border-width: 1px;
}
atom-text-editor::shadow {
.gutter-boot-hint:before {
content: url("atom://boot-java/styles/boot-icon.png");
display: block;
width: 10px;
height: 1em;
margin: 0 2px 0 0;
float: left;
}
}