Support sts/highlight message. Support "standalone" server for Atom
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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"
|
||||
|
||||
BIN
atom-extensions/atom-boot-java/styles/boot-icon.png
Normal file
BIN
atom-extensions/atom-boot-java/styles/boot-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 617 B |
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user