From eceb3126c3de551459bd60c6e1fe7e19dd310f4b Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Wed, 20 Sep 2017 10:27:59 -0400 Subject: [PATCH] Boot-Java for Atom --- atom-extensions/atom-boot-java/.gitignore | 3 + atom-extensions/atom-boot-java/lib/main.js | 48 ++++++++++++ atom-extensions/atom-boot-java/package.json | 76 +++++++++++++++++++ .../atom-boot-java/properties.json | 3 + atom-extensions/atom-boot-java/script.js | 34 +++++++++ 5 files changed, 164 insertions(+) create mode 100644 atom-extensions/atom-boot-java/.gitignore create mode 100644 atom-extensions/atom-boot-java/lib/main.js create mode 100644 atom-extensions/atom-boot-java/package.json create mode 100644 atom-extensions/atom-boot-java/properties.json create mode 100644 atom-extensions/atom-boot-java/script.js diff --git a/atom-extensions/atom-boot-java/.gitignore b/atom-extensions/atom-boot-java/.gitignore new file mode 100644 index 000000000..38d57c0ad --- /dev/null +++ b/atom-extensions/atom-boot-java/.gitignore @@ -0,0 +1,3 @@ +.idea/ +server/ +node_modules/ diff --git a/atom-extensions/atom-boot-java/lib/main.js b/atom-extensions/atom-boot-java/lib/main.js new file mode 100644 index 000000000..bc9d76b18 --- /dev/null +++ b/atom-extensions/atom-boot-java/lib/main.js @@ -0,0 +1,48 @@ +const path = require('path'); +const { JarLanguageClient } = require('pivotal-atom-languageclient-commons'); +const PROPERTIES = require('../properties.json'); + +class BootJavaLanguageClient extends JarLanguageClient { + + constructor() { + //noinspection JSAnnotator + super( + PROPERTIES.jarUrl, + path.join(__dirname, '..', 'server'), + 'boot-java-language-server.jar' + ); + } + + getGrammarScopes() { + return ['source.java'] + } + + getLanguageName() { + return 'boot-java' + } + + getServerName() { + return 'Spring Boot' + } + + activate() { + // replace the example argument 'linter-ruby' with the name of this Atom package + require('atom-package-deps').install('boot-java').then(function() { + console.log('All dependencies installed, good to go') + }); + super.activate(); + } + + launchVmArgs(version) { + return [ + '-Dorg.slf4j.simpleLogger.logFile=boot-java.log', + '-Dorg.slf4j.simpleLogger.defaultLogLevel=debug', + // '-Xdebug', + // '-agentlib:jdwp=transport=dt_socket,server=y,address=7999,suspend=n' + ]; + + } + +} + +module.exports = new BootJavaLanguageClient(); diff --git a/atom-extensions/atom-boot-java/package.json b/atom-extensions/atom-boot-java/package.json new file mode 100644 index 000000000..73420e03f --- /dev/null +++ b/atom-extensions/atom-boot-java/package.json @@ -0,0 +1,76 @@ +{ + "name": "boot-java", + "main": "./lib/main", + "version": "0.0.10", + "description": "Spring Boot support for Atom", + "repository": "https://github.com/spring-projects/atom-boot-java", + "icon": "icon.png", + "license": "MIT", + "engines": { + "atom": ">=1.17.0" + }, + "files": [ + "lib/", + "server/", + "properties.json" + ], + "dependencies": { + "atom-package-deps": "^4.6.0", + "download": "^6.2.5", + "pivotal-atom-languageclient-commons": "0.0.7" + }, + "devDependencies": { + "coffeelint": "^1.10.1" + }, + "scripts": { + "clean": "rm -fr node_modules", + "postinstall": "node script.js" + }, + "package-deps": [ + "atom-ide-ui" + ], + "consumedServices": { + "linter-indie": { + "versions": { + "2.0.0": "consumeLinterV2" + } + }, + "nuclide-datatip.provider": { + "versions": { + "0.0.0": "consumeDatatip" + } + } + }, + "providedServices": { + "autocomplete.provider": { + "versions": { + "2.0.0": "provideAutocomplete" + } + }, + "nuclide-code-format.provider": { + "versions": { + "0.0.0": "provideCodeFormat" + } + }, + "nuclide-definition-provider": { + "versions": { + "0.0.0": "provideDefinitions" + } + }, + "nuclide-find-references.provider": { + "versions": { + "0.0.0": "provideFindReferences" + } + }, + "nuclide-outline-view": { + "versions": { + "0.0.0": "provideOutlines" + } + } + }, + "bundledDependencies": [ + "atom-package-deps", + "download", + "pivotal-atom-languageclient-commons" + ] +} diff --git a/atom-extensions/atom-boot-java/properties.json b/atom-extensions/atom-boot-java/properties.json new file mode 100644 index 000000000..0182cfcf1 --- /dev/null +++ b/atom-extensions/atom-boot-java/properties.json @@ -0,0 +1,3 @@ +{ + "jarUrl": "https://s3-us-west-1.amazonaws.com/s3-test.spring.io/sts4/fatjars/snapshots/boot-java-language-server-0.0.10-201709182357.jar" +} diff --git a/atom-extensions/atom-boot-java/script.js b/atom-extensions/atom-boot-java/script.js new file mode 100644 index 000000000..3b2634bd4 --- /dev/null +++ b/atom-extensions/atom-boot-java/script.js @@ -0,0 +1,34 @@ +const fs = require('fs'); +const path = require('path'); +const download = require('download'); +const PROPERTIES = require('./properties.json'); + +let fileExists = function(path) { + return new Promise((resolve, reject) => { + fs.access(path, fs.R_OK, error => { + resolve(!error || error.code !== 'ENOENT'); + }) + }); +}; + +const serverDownloadUrl = PROPERTIES.jarUrl; + +const serverHome = path.join(__dirname, 'server'); + +const localFileName = path.join(serverHome, 'boot-java-language-server.jar'); + +fileExists(localFileName).then(exists => { + if (!exists) { + console.log(`Downloading ${serverDownloadUrl} to ${localFileName}`); + fileExists(serverHome) + .then(doesExist => { if (!doesExist) fs.mkdir(serverHome) }) + .then(() => download(serverDownloadUrl)) + .then(data => fs.writeFileSync(localFileName, data)) + .then(() => fileExists(localFileName)) + .then(doesExist => { if (!doesExist) throw Error(`Failed to install the ${this.getServerName()} language server`) }) + .then(() => console.log(`Successfully downloaded ${serverDownloadUrl}`)); + } +}); + + +