diff --git a/package.json b/package.json index abb4f1844..61c50284c 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "react-atom-fork": "^0.10.0", "reactionary-atom-fork": "^0.9.0", "runas": "0.5.4", - "scandal": "0.15.3", + "scandal": "0.16.0", "scoped-property-store": "^0.9.0", "scrollbar-style": "^0.4.0", "season": "^1.0.2", @@ -81,7 +81,7 @@ "dev-live-reload": "0.31.0", "exception-reporting": "0.18.0", "feedback": "0.33.0", - "find-and-replace": "0.121.0", + "find-and-replace": "0.122.0", "fuzzy-finder": "0.56.0", "git-diff": "0.34.0", "go-to-line": "0.23.0", diff --git a/spec/project-spec.coffee b/spec/project-spec.coffee index 189f7a411..a76cbceee 100644 --- a/spec/project-spec.coffee +++ b/spec/project-spec.coffee @@ -205,6 +205,17 @@ describe "Project", -> fs.writeFileSync(filePath, sampleContent) fs.writeFileSync(commentFilePath, sampleCommentContent) + describe "when a file doesn't exist", -> + it "calls back with an error", -> + errors = [] + waitsForPromise -> + atom.project.replace /items/gi, 'items', ['/not-a-file.js'], (result, error) -> + errors.push(error) + + runs -> + expect(errors).toHaveLength 1 + expect(errors[0].path).toBe '/not-a-file.js' + describe "when called with unopened files", -> it "replaces properly", -> results = [] diff --git a/src/project.coffee b/src/project.coffee index a780603eb..61c9d9179 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -239,6 +239,9 @@ class Project extends Model task.on 'scan:result-found', (result) => iterator(result) unless @isPathModified(result.filePath) + task.on 'scan:file-error', (error) -> + iterator(null, error) + if _.isFunction(options.onPathsSearched) task.on 'scan:paths-searched', (numberOfPathsSearched) -> options.onPathsSearched(numberOfPathsSearched) @@ -283,6 +286,7 @@ class Project extends Model checkFinished() task.on 'replace:path-replaced', iterator + task.on 'replace:file-error', (error) -> iterator(null, error) for buffer in @getBuffers() continue unless buffer.getPath() in filePaths diff --git a/src/replace-handler.coffee b/src/replace-handler.coffee index bdadabfb3..5c4bc5574 100644 --- a/src/replace-handler.coffee +++ b/src/replace-handler.coffee @@ -6,8 +6,10 @@ module.exports = (filePaths, regexSource, regexFlags, replacementText) -> replacer = new PathReplacer() regex = new RegExp(regexSource, regexFlags) + replacer.on 'file-error', ({code, path, message}) -> + emit('replace:file-error', {code, path, message}) + replacer.on 'path-replaced', (result) -> emit('replace:path-replaced', result) - replacer.replacePaths regex, replacementText, filePaths, -> - callback() + replacer.replacePaths(regex, replacementText, filePaths, -> callback()) diff --git a/src/scan-handler.coffee b/src/scan-handler.coffee index 562ab2610..7591ccd27 100644 --- a/src/scan-handler.coffee +++ b/src/scan-handler.coffee @@ -9,6 +9,9 @@ module.exports = (rootPath, regexSource, options) -> searcher = new PathSearcher() scanner = new PathScanner(rootPath, options) + searcher.on 'file-error', ({code, path, message}) -> + emit('scan:file-error', {code, path, message}) + searcher.on 'results-found', (result) -> emit('scan:result-found', result)