From 40fc327f20921247404f77f4f6b3a22e48381cf9 Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Mon, 24 Jul 2017 23:20:40 -0400 Subject: [PATCH 1/2] Dedicated grammar for CF manifest-yaml --- .../atom-cf-manifest-yaml-language/.gitignore | 2 + .../coffeelint.json | 37 +++ .../grammars/cf-manifest-yaml.cson | 8 + .../package.json | 21 ++ .../settings/language-cf-manifest-yaml.cson | 8 + atom-extensions/atom-commons/package.json | 2 +- .../atom-manifest-yaml/lib/main.js | 222 +----------------- 7 files changed, 79 insertions(+), 221 deletions(-) create mode 100644 atom-extensions/atom-cf-manifest-yaml-language/.gitignore create mode 100644 atom-extensions/atom-cf-manifest-yaml-language/coffeelint.json create mode 100644 atom-extensions/atom-cf-manifest-yaml-language/grammars/cf-manifest-yaml.cson create mode 100644 atom-extensions/atom-cf-manifest-yaml-language/package.json create mode 100644 atom-extensions/atom-cf-manifest-yaml-language/settings/language-cf-manifest-yaml.cson diff --git a/atom-extensions/atom-cf-manifest-yaml-language/.gitignore b/atom-extensions/atom-cf-manifest-yaml-language/.gitignore new file mode 100644 index 000000000..4d64059f6 --- /dev/null +++ b/atom-extensions/atom-cf-manifest-yaml-language/.gitignore @@ -0,0 +1,2 @@ +/node_modules + diff --git a/atom-extensions/atom-cf-manifest-yaml-language/coffeelint.json b/atom-extensions/atom-cf-manifest-yaml-language/coffeelint.json new file mode 100644 index 000000000..d6c3236aa --- /dev/null +++ b/atom-extensions/atom-cf-manifest-yaml-language/coffeelint.json @@ -0,0 +1,37 @@ +{ + "max_line_length": { + "level": "ignore" + }, + "no_empty_param_list": { + "level": "error" + }, + "arrow_spacing": { + "level": "error" + }, + "no_interpolation_in_single_quotes": { + "level": "error" + }, + "no_debugger": { + "level": "error" + }, + "prefer_english_operator": { + "level": "error" + }, + "colon_assignment_spacing": { + "spacing": { + "left": 0, + "right": 1 + }, + "level": "error" + }, + "braces_spacing": { + "spaces": 0, + "level": "error" + }, + "spacing_after_comma": { + "level": "error" + }, + "no_stand_alone_at": { + "level": "error" + } +} \ No newline at end of file diff --git a/atom-extensions/atom-cf-manifest-yaml-language/grammars/cf-manifest-yaml.cson b/atom-extensions/atom-cf-manifest-yaml-language/grammars/cf-manifest-yaml.cson new file mode 100644 index 000000000..ca7d226ee --- /dev/null +++ b/atom-extensions/atom-cf-manifest-yaml-language/grammars/cf-manifest-yaml.cson @@ -0,0 +1,8 @@ +'scopeName': 'source.cf-manifest-yaml' +'name': 'Manifest-YAML' +'fileTypes': [ + 'manifest.yml' +] +'patterns': [ + { 'include': 'source.yaml' } +] diff --git a/atom-extensions/atom-cf-manifest-yaml-language/package.json b/atom-extensions/atom-cf-manifest-yaml-language/package.json new file mode 100644 index 000000000..3fd5572f6 --- /dev/null +++ b/atom-extensions/atom-cf-manifest-yaml-language/package.json @@ -0,0 +1,21 @@ +{ + "name": "language-cf-manifest-yaml", + "version": "0.1.0", + "description": "CF Deployment Manifest YAML language support in Atom", + "license": "MIT", + "engines": { + "atom": "*", + "node": "*" + }, + "homepage": "http://pivotalcf.io", + "repository": { + "type": "git", + "url": "https://github.com/spring-projects/sts4.git" + }, + "bugs": { + "url": "https://github.com/spring-projects/sts4/issues" + }, + "devDependencies": { + "coffeelint": "^1.10.1" + } +} \ No newline at end of file diff --git a/atom-extensions/atom-cf-manifest-yaml-language/settings/language-cf-manifest-yaml.cson b/atom-extensions/atom-cf-manifest-yaml-language/settings/language-cf-manifest-yaml.cson new file mode 100644 index 000000000..64852edfa --- /dev/null +++ b/atom-extensions/atom-cf-manifest-yaml-language/settings/language-cf-manifest-yaml.cson @@ -0,0 +1,8 @@ +'.source.yaml': + 'editor': + 'autoIndentOnPaste': false + 'commentStart': '# ' + 'foldEndPattern': '^\\s*$|^\\s*\\}|^\\s*\\]|^\\s*\\)' + 'increaseIndentPattern': '^\\s*.*(:|-) ?(&\\w+)?(\\{[^}"\']*|\\([^)"\']*)?$' + 'decreaseIndentPattern': '^\\s+\\}$' +'tabType': 'soft' \ No newline at end of file diff --git a/atom-extensions/atom-commons/package.json b/atom-extensions/atom-commons/package.json index eab5ec6fa..5a76db0d3 100644 --- a/atom-extensions/atom-commons/package.json +++ b/atom-extensions/atom-commons/package.json @@ -9,7 +9,7 @@ }, "main": "./dist/index", "dependencies": { - "atom-languageclient": "file:/Users/aboyko/git/atom-languageclient", + "atom-languageclient": "0.1.3", "decompress": "^4.2.0", "portfinder": "^1.0.13", "remote-file-size": "^3.0.3", diff --git a/atom-extensions/atom-manifest-yaml/lib/main.js b/atom-extensions/atom-manifest-yaml/lib/main.js index 8fe716580..739831e77 100644 --- a/atom-extensions/atom-manifest-yaml/lib/main.js +++ b/atom-extensions/atom-manifest-yaml/lib/main.js @@ -1,217 +1,4 @@ -// const cp = require('child_process'); -// const fs = require('fs'); const path = require('path'); -// const url = require('url'); -// const remote = require('remote-file-size'); -// const PortFinder = require('portfinder'); -// const net = require('net'); -// const rpc = require('vscode-jsonrpc'); -// const {AutoLanguageClient, DownloadFile} = require('atom-languageclient'); -// -// const serverDownloadUrl = 'https://s3-us-west-1.amazonaws.com/s3-test.spring.io/sts4/fatjars/snapshots/manifest-yaml-language-server-0.0.9-201707121637.jar'; -// const serverLauncherJar = path.basename(url.parse(serverDownloadUrl).pathname); -// -// class ManifestYamlLanguageClient extends AutoLanguageClient { -// getGrammarScopes () { return [ 'source.yaml' ] } -// getLanguageName () { return 'CF-Manifest-YAML' } -// getServerName () { return 'CF Manifest YAML' } -// -// constructor() { -// super(); -// this.statusElement = document.createElement('span') -// this.statusElement.className = 'inline-block' -// } -// -// startServerProcess () { -// // //TODO: Remove when debugging is over -// atom.config.set('core.debugLSP', true); -// -// let childProcess; -// -// return new Promise((resolve, reject) => { -// -// PortFinder.getPort((err, port) => { -// -// let server = net.createServer(socket => { -// console.log('Socket is present!'); -// server.close(); -// this.socket = socket; -// resolve(childProcess); -// }); -// -// server.listen(port, 'localhost', () => { -// this.launchProcess(port).then(p => childProcess = p); -// }); -// -// }); -// -// }); -// } -// -// launchProcess(port) { -// const serverHome = path.join(__dirname, '..', 'server'); -// const command = this.findJavaExecutable('java'); -// -// return this.compatibleJavaVersion(command).then(version => { -// if (version) { -// var args = []; -// if (version >= 9) { -// args.push('--add-modules=java.se.ee'); -// } -// return this.getOrInstallLauncher(serverHome).then(launcher => this.doLaunchProcess(serverHome, command, launcher, port, args)); -// } else { -// this.logger.error('Java executable is not Java 8 or higher'); -// } -// }); -// } -// -// doLaunchProcess(serverHome, javaExecutable, launcher, port, args=[]) { -// let vmArgs = args.concat([ -// `-Dserver.port=${port}`, -// '-Xdebug', -// '-agentlib:jdwp=transport=dt_socket,address=9000,server=y,suspend=n', -// '-Dorg.slf4j.simpleLogger.logFile=manifest-yaml.log', -// '-Dorg.slf4j.simpleLogger.defaultLogLevel=trace', -// '-Djava.util.logging.config.file=logging.properties', -// '-jar', -// launcher -// ]); -// this.logger.debug(`starting "${javaExecutable} ${vmArgs.join(' ')}"`); -// return cp.spawn(javaExecutable, vmArgs, { cwd: serverHome }) -// } -// -// getOrInstallLauncher (serverHome) { -// const fullLauncherJar = path.join(serverHome, serverLauncherJar); -// return this.fileExists(fullLauncherJar).then(doesExist => -// doesExist ? fullLauncherJar : this.installServer(serverHome).then(() => fullLauncherJar) -// ); -// } -// -// installServer (serverHome) { -// const localFileName = path.join(serverHome, serverLauncherJar); -// this.logger.log(`Downloading ${serverDownloadUrl} to ${localFileName}`); -// return this.fileExists(serverHome) -// .then(doesExist => { if (!doesExist) fs.mkdir(serverHome) }) -// .then(() => this.remoteFileSize(serverDownloadUrl)) -// .then((size) => DownloadFile(serverDownloadUrl, localFileName, (bytesDone, percent) => this.updateStatusBar(`downloading ${percent}%`), size)) -// .then(() => this.fileExists(path.join(serverHome, serverLauncherJar))) -// .then(doesExist => { if (!doesExist) throw Error(`Failed to install the ${this.getServerName()} language server`) }) -// .then(() => this.updateStatusBar('installed')) -// // .then(() => fs.unlink(localFileName)) -// .then(() => Promise.resolve(true)); -// } -// -// // Determine whether we should start a server for a given editor if we don't have one yet -// shouldStartForEditor(editor) { -// return super.shouldStartForEditor(editor) && /.*manifest.*\.yml/.test(editor.getFileName()); -// } -// -// -// preInitialization(connection) { -// connection.onCustom('language/status', (e) => this.updateStatusBar(`${e.type.replace(/^Started$/, '')} ${e.message}`)); -// } -// -// updateStatusBar (text) { -// this.statusElement.textContent = `${this.name} ${text}`; -// } -// -// remoteFileSize(url) { -// return new Promise((resolve, reject) => { -// remote(url, (e,s) => { -// if (e) { -// reject(e); -// } else { -// resolve(s); -// } -// }); -// }); -// } -// -// consumeStatusBar (statusBar) { -// this.statusTile = statusBar.addRightTile({ item: this.statusElement, priority: 1000 }); -// } -// -// fileExists (path) { -// return new Promise((resolve, reject) => { -// fs.access(path, fs.R_OK, error => { -// resolve(!error || error.code !== 'ENOENT'); -// }) -// }) -// } -// -// createServerConnection () { -// return rpc.createMessageConnection( -// new rpc.SocketMessageReader(this.socket), -// new rpc.SocketMessageWriter(this.socket) -// ) -// } -// -// createRpcConnection(process) { -// let connection = super.createRpcConnection(process); -// connection.trace(rpc.Trace.Messages, console); -// return connection; -// } -// -// findJavaExecutable(binname) { -// binname = this.correctBinname(binname); -// -// // First search each JAVA_HOME bin folder -// if (process.env['JAVA_HOME']) { -// let workspaces = process.env['JAVA_HOME'].split(Path.delimiter); -// for (let i = 0; i < workspaces.length; i++) { -// let binpath = Path.join(workspaces[i], 'bin', binname); -// if (FS.existsSync(binpath)) { -// return binpath; -// } -// } -// } -// -// // Then search PATH parts -// if (process.env['PATH']) { -// let pathparts = process.env['PATH'].split(path.delimiter); -// for (let i = 0; i < pathparts.length; i++) { -// let binpath = path.join(pathparts[i], binname); -// if (fs.existsSync(binpath)) { -// return binpath; -// } -// } -// } -// -// // Else return the binary name directly (this will likely always fail downstream) -// return null; -// -// // return '/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bin/java'; -// -// // return '/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin/java'; -// } -// -// correctBinname(binname) { -// if (process.platform === 'win32') -// return binname + '.exe'; -// else -// return binname; -// } -// -// compatibleJavaVersion(javaExecutablePath) { -// return new Promise((resolve, reject) => { -// cp.execFile(javaExecutablePath, ['-version'], {}, (error, stdout, stderr) => { -// cp.execFile(javaExecutablePath, ['-version'], {}, (error, stdout, stderr) => { -// if (stderr.indexOf('1.8') >= 0) { -// resolve(8); -// } else if (stderr.indexOf('java version "9"') >= 0) { -// resolve(9); -// } else { -// resolve(0); -// } -// }); -// }); -// }); -// } -// -// } -// -// module.exports = new ManifestYamlLanguageClient(); - const { JarLanguageClient } = require('atom-commons'); class ManifestYamlLanguageClient extends JarLanguageClient { @@ -227,11 +14,11 @@ class ManifestYamlLanguageClient extends JarLanguageClient { } getGrammarScopes() { - return ['source.yaml'] + return ['source.cf-manifest-yaml'] } getLanguageName() { - return 'CF-Manifest-YAML' + return 'Manifest-YAML' } getServerName() { @@ -246,11 +33,6 @@ class ManifestYamlLanguageClient extends JarLanguageClient { this.updateStatusBar('installed'); } - // Determine whether we should start a server for a given editor if we don't have one yet - shouldStartForEditor(editor) { - return super.shouldStartForEditor(editor) && /.*manifest.*\.yml/.test(editor.getFileName()); - } - consumeStatusBar (statusBar) { this.statusTile = statusBar.addRightTile({ item: this.statusElement, priority: 1000 }); } From 1bd2b7a9459c5228b63bb01d1c96b065dfa8d406 Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Tue, 25 Jul 2017 10:22:15 -0400 Subject: [PATCH 2/2] Merge cf-manifest-yaml language and ls extension together --- .../atom-cf-manifest-yaml-language/.gitignore | 2 -- .../package.json | 21 ------------------- .../coffeelint.json | 0 .../grammars/cf-manifest-yaml.cson | 0 .../atom-manifest-yaml/package.json | 5 ++++- .../settings/language-cf-manifest-yaml.cson | 0 6 files changed, 4 insertions(+), 24 deletions(-) delete mode 100644 atom-extensions/atom-cf-manifest-yaml-language/.gitignore delete mode 100644 atom-extensions/atom-cf-manifest-yaml-language/package.json rename atom-extensions/{atom-cf-manifest-yaml-language => atom-manifest-yaml}/coffeelint.json (100%) rename atom-extensions/{atom-cf-manifest-yaml-language => atom-manifest-yaml}/grammars/cf-manifest-yaml.cson (100%) rename atom-extensions/{atom-cf-manifest-yaml-language => atom-manifest-yaml}/settings/language-cf-manifest-yaml.cson (100%) diff --git a/atom-extensions/atom-cf-manifest-yaml-language/.gitignore b/atom-extensions/atom-cf-manifest-yaml-language/.gitignore deleted file mode 100644 index 4d64059f6..000000000 --- a/atom-extensions/atom-cf-manifest-yaml-language/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules - diff --git a/atom-extensions/atom-cf-manifest-yaml-language/package.json b/atom-extensions/atom-cf-manifest-yaml-language/package.json deleted file mode 100644 index 3fd5572f6..000000000 --- a/atom-extensions/atom-cf-manifest-yaml-language/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "language-cf-manifest-yaml", - "version": "0.1.0", - "description": "CF Deployment Manifest YAML language support in Atom", - "license": "MIT", - "engines": { - "atom": "*", - "node": "*" - }, - "homepage": "http://pivotalcf.io", - "repository": { - "type": "git", - "url": "https://github.com/spring-projects/sts4.git" - }, - "bugs": { - "url": "https://github.com/spring-projects/sts4/issues" - }, - "devDependencies": { - "coffeelint": "^1.10.1" - } -} \ No newline at end of file diff --git a/atom-extensions/atom-cf-manifest-yaml-language/coffeelint.json b/atom-extensions/atom-manifest-yaml/coffeelint.json similarity index 100% rename from atom-extensions/atom-cf-manifest-yaml-language/coffeelint.json rename to atom-extensions/atom-manifest-yaml/coffeelint.json diff --git a/atom-extensions/atom-cf-manifest-yaml-language/grammars/cf-manifest-yaml.cson b/atom-extensions/atom-manifest-yaml/grammars/cf-manifest-yaml.cson similarity index 100% rename from atom-extensions/atom-cf-manifest-yaml-language/grammars/cf-manifest-yaml.cson rename to atom-extensions/atom-manifest-yaml/grammars/cf-manifest-yaml.cson diff --git a/atom-extensions/atom-manifest-yaml/package.json b/atom-extensions/atom-manifest-yaml/package.json index 7ea1412f5..f7ca7ab48 100644 --- a/atom-extensions/atom-manifest-yaml/package.json +++ b/atom-extensions/atom-manifest-yaml/package.json @@ -1,5 +1,5 @@ { - "name": "manifest-yaml", + "name": "cf-manifest-yaml", "main": "./lib/main", "version": "0.1.0", "description": "Cloud Foundry Deployment Manifest YAML support for Atom", @@ -15,6 +15,9 @@ "remote-file-size": "^3.0.3", "atom-commons": "file:../atom-commons" }, + "devDependencies": { + "coffeelint": "^1.10.1" + }, "scripts": { "clean": "rm -fr node_modules" }, diff --git a/atom-extensions/atom-cf-manifest-yaml-language/settings/language-cf-manifest-yaml.cson b/atom-extensions/atom-manifest-yaml/settings/language-cf-manifest-yaml.cson similarity index 100% rename from atom-extensions/atom-cf-manifest-yaml-language/settings/language-cf-manifest-yaml.cson rename to atom-extensions/atom-manifest-yaml/settings/language-cf-manifest-yaml.cson