diff --git a/lib/rename/gorename.js b/lib/rename/gorename.js index 148492fd..8e0cbcca 100644 --- a/lib/rename/gorename.js +++ b/lib/rename/gorename.js @@ -37,22 +37,23 @@ class Gorename { const dialog = new RenameDialog({ identifier: word, callback: (newName) => { - this.saveAllEditors() - const file = editor.getBuffer().getPath() - const cwd = path.dirname(file) - - // restore cursor position after gorename completes and the buffer is reloaded - if (cursor) { - const disp = editor.getBuffer().onDidReload(() => { - editor.setCursorBufferPosition(cursor, {autoscroll: false}) - const element = atom.views.getView(editor) - if (element) { - element.focus() - } - disp.dispose() - }) - } - this.runGorename(file, offset, cwd, newName, cmd) + this.saveAllEditors().then(() => { + const file = editor.getBuffer().getPath() + const cwd = path.dirname(file) + + // restore cursor position after gorename completes and the buffer is reloaded + if (cursor) { + const disp = editor.getBuffer().onDidReload(() => { + editor.setCursorBufferPosition(cursor, {autoscroll: false}) + const element = atom.views.getView(editor) + if (element) { + element.focus() + } + disp.dispose() + }) + } + this.runGorename(file, offset, cwd, newName, cmd) + }) } }) @@ -74,11 +75,13 @@ class Gorename { } saveAllEditors () { + const promises = [] for (const editor of atom.workspace.getTextEditors()) { if (editor.isModified() && isValidEditor(editor)) { - editor.save() + promises.push(editor.save()) } } + return Promise.all(promises) } wordAndOffset (editor) { diff --git a/spec/format/formatter-spec.js b/spec/format/formatter-spec.js index 7e65dd8b..1dca7ddb 100644 --- a/spec/format/formatter-spec.js +++ b/spec/format/formatter-spec.js @@ -5,6 +5,12 @@ import fs from 'fs' import path from 'path' import {lifecycle} from './../spec-helpers' +function setTextAndSave (editor, text) { + const buffer = editor.getBuffer() + buffer.setText(unformattedText) + return Promise.resolve(buffer.save()) +} + const nl = '\n' const unformattedText = 'package main' + nl + nl + 'func main() {' + nl + '}' + nl const formattedText = 'package main' + nl + nl + 'func main() {' + nl + '}' + nl @@ -78,10 +84,8 @@ describe('formatter', () => { }) it('does not format the file on save', () => { - runs(() => { - const buffer = editor.getBuffer() - buffer.setText(unformattedText) - buffer.save() + waitsForPromise(() => { + return setTextAndSave(editor, unformattedText) }) waitsFor(() => { return actual }) @@ -93,10 +97,8 @@ describe('formatter', () => { }) it('formats the file on command', () => { - runs(() => { - const buffer = editor.getBuffer() - buffer.setText(unformattedText) - buffer.save() + waitsForPromise(() => { + return setTextAndSave(editor, unformattedText) }) waitsFor(() => { @@ -127,10 +129,8 @@ describe('formatter', () => { atom.config.set('go-plus.format.tool', tool) it('formats on save using ' + tool, () => { - runs(() => { - const buffer = editor.getBuffer() - buffer.setText(unformattedText) - buffer.save() + waitsForPromise(() => { + return setTextAndSave(editor, unformattedText) }) waitsFor(() => { diff --git a/spec/orchestrator-spec.js b/spec/orchestrator-spec.js index 393e9243..23c31cc9 100644 --- a/spec/orchestrator-spec.js +++ b/spec/orchestrator-spec.js @@ -50,7 +50,7 @@ describe('orchestrator', () => { waitsForPromise(() => { const filepath = path.join(__dirname, 'fixtures', 'main.go') return atom.workspace.open(filepath).then((e) => { - e.save() + return e.save() }) }) @@ -72,7 +72,7 @@ describe('orchestrator', () => { waitsForPromise(() => { const filepath = path.join(__dirname, 'fixtures', 'main.go') return atom.workspace.open(filepath).then((e) => { - e.save() + return e.save() }) }) @@ -99,7 +99,7 @@ describe('orchestrator', () => { waitsForPromise(() => { const filepath = path.join(__dirname, 'fixtures', 'main.go') return atom.workspace.open(filepath).then((e) => { - e.save() + return e.save() }) }) @@ -139,7 +139,7 @@ describe('orchestrator', () => { waitsForPromise(() => { const filepath = path.join(__dirname, 'fixtures', 'main.go') return atom.workspace.open(filepath).then((e) => { - e.save() + return e.save() }) }) @@ -161,7 +161,7 @@ describe('orchestrator', () => { waitsForPromise(() => { const filepath = path.join(__dirname, 'fixtures', 'main.go') return atom.workspace.open(filepath).then((e) => { - e.save() + return e.save() }) }) @@ -184,7 +184,7 @@ describe('orchestrator', () => { waitsForPromise(() => { const filepath = path.join(__dirname, 'fixtures', 'main.go') return atom.workspace.open(filepath).then((e) => { - e.save() + return e.save() }) }) diff --git a/spec/test/tester-spec.js b/spec/test/tester-spec.js index a82fe08c..c4c15376 100644 --- a/spec/test/tester-spec.js +++ b/spec/test/tester-spec.js @@ -67,15 +67,24 @@ describe('tester', () => { }) it('displays coverage for go source', () => { - let buffer = editor.getBuffer() - buffer.setText('package main\n\nimport "fmt"\n\nfunc main() {\n\tfmt.Println(Hello())\n}\n\nfunc Hello() string {\n\treturn "Hello, 世界"\n}\n') - buffer.save() - let testBuffer = testEditor.getBuffer() - testBuffer.setText('package main\n\nimport "testing"\n\nfunc TestHello(t *testing.T) {\n\tresult := Hello()\n\tif result != "Hello, 世界" {\n\t\tt.Errorf("Expected %s - got %s", "Hello, 世界", result)\n\t}\n}') - testBuffer.save() - let p = tester.runTests(editor) + let buffer + let testBuffer - waitsForPromise(() => { return p }) + runs(() => { + buffer = editor.getBuffer() + buffer.setText('package main\n\nimport "fmt"\n\nfunc main() {\n\tfmt.Println(Hello())\n}\n\nfunc Hello() string {\n\treturn "Hello, 世界"\n}\n') + testBuffer = testEditor.getBuffer() + testBuffer.setText('package main\n\nimport "testing"\n\nfunc TestHello(t *testing.T) {\n\tresult := Hello()\n\tif result != "Hello, 世界" {\n\t\tt.Errorf("Expected %s - got %s", "Hello, 世界", result)\n\t}\n}') + }) + + waitsForPromise(() => { + return Promise.all([ + buffer.save(), + testBuffer.save() + ]) + }) + + waitsForPromise(() => { return tester.runTests(editor) }) runs(() => { const layers = tester.markedEditors.get(editor.id) @@ -110,15 +119,24 @@ describe('tester', () => { }) it('clears coverage for go source', () => { - let buffer = editor.getBuffer() - buffer.setText('package main\n\nimport "fmt"\n\nfunc main() {\n\tfmt.Println(Hello())\n}\n\nfunc Hello() string {\n\treturn "Hello, 世界"\n}\n') - buffer.save() - let testBuffer = testEditor.getBuffer() - testBuffer.setText('package main\n\nimport "testing"\n\nfunc TestHello(t *testing.T) {\n\tresult := Hello()\n\tif result != "Hello, 世界" {\n\t\tt.Errorf("Expected %s - got %s", "Hello, 世界", result)\n\t}\n}') - testBuffer.save() - let p = tester.runTests(editor) - - waitsForPromise(() => { return p }) + let buffer + let testBuffer + + runs(() => { + buffer = editor.getBuffer() + buffer.setText('package main\n\nimport "fmt"\n\nfunc main() {\n\tfmt.Println(Hello())\n}\n\nfunc Hello() string {\n\treturn "Hello, 世界"\n}\n') + testBuffer = testEditor.getBuffer() + testBuffer.setText('package main\n\nimport "testing"\n\nfunc TestHello(t *testing.T) {\n\tresult := Hello()\n\tif result != "Hello, 世界" {\n\t\tt.Errorf("Expected %s - got %s", "Hello, 世界", result)\n\t}\n}') + }) + + waitsForPromise(() => { + return Promise.all([ + buffer.save(), + testBuffer.save() + ]) + }) + + waitsForPromise(() => { return tester.runTests(editor) }) runs(() => { let layerids = tester.markedEditors.get(editor.id).split(',')