Skip to content
This repository has been archived by the owner on Dec 15, 2022. It is now read-only.

Replacing multiple characters with newlines in a scanInRange only replaces the first occurence #224

Open
1 task done
jazzpi opened this issue Mar 15, 2017 · 5 comments
Open
1 task done
Labels

Comments

@jazzpi
Copy link

jazzpi commented Mar 15, 2017

Prerequisites

(I didn't really want to factory reset but I'm fairly certain that wouldn't change anything, and this is not a feature request so no package searching)

Description

Replacing multiple characters with newlines (or carriage returns, but not alphanumeric characters or tabs!) in a TextBuffer.scanInRange only replaces the first occurence (but inserts more of the replacement without removing the pattern).

Steps to Reproduce

  1. Open a new file with the contents
a,b,c
  1. In the developer console, execute atom.workspace.getActiveTextEditor().buffer.scanInRange(/,/g, [[0,0],[1,0]], function(args) {console.debug("found");args.replace('\n')})

Expected behavior: "found" should be output twice and the buffer should now contain

a
b
c

Actual behavior: "found" is actually output twice, but the buffer now contains

a

b,c

Reproduces how often: 100% of the time.

Versions

OS: Arch Linux

$ uname -r
4.9.11-1-ARCH
$ atom --version
Atom    : 1.15.0
Electron: 1.4.15
Chrome  : 53.0.2785.143
Node    : 6.5.0
$ apm --version
(node:1202) DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
apm  1.17.0
npm  4.4.1
node 7.7.3 x64
python 2.7.13
git 2.12.0

Additional Information

This used to work. I believe it might have been broken in 7ad08bc, but I don't really want to bisect.

@50Wliu
Copy link
Contributor

50Wliu commented Mar 15, 2017

Can you reproduce this using an official version of Atom, available at https://atom.io?

@jazzpi
Copy link
Author

jazzpi commented Mar 15, 2017

No, since atom.io doesn't provide an Arch Linux version and building from source breaks with Error: Cannot find module 'node-gyp/bin/node-gyp'. However, I believe the atom-editor-bin package I'm using actually installs Atom from the .deb package on atom.io, and the same issue also occurs on this Travis build.

@jazzpi
Copy link
Author

jazzpi commented May 25, 2017

This has been reproduced by @mkiken in lloeki/ex-mode#178 (comment) using an official version of Atom.

@50Wliu 50Wliu added the bug label May 25, 2017
@sophaskins
Copy link

An example failing spec for the issue is:

      it "works with newline splitting", ->
        buffer = new TextBuffer("abc,def,ghi")
        buffer.scanInRange /,/g, [[0,0], [1,0]], ({replace}) ->
          replace("\n")
        expect(buffer.getText()).toBe "abc\ndef\nghi"

I added this to a checkout of https://github.com/atom/text-buffer at master, and had the following failure:

Failures:
1) TextBuffer ::scanInRange(range, regex, fn) when given a regex with a global flag works with newline splitting
  Message:
    Expected 'abc

    def,ghi' to be 'abc
    def
    ghi'.
  Stack:
    Error: Expected 'abc

    def,ghi' to be 'abc
    def
    ghi'.
        at Object.<anonymous> (/home/sophaskins/development/text-buffer/spec/text-buffer-spec.coffee:1520:34)
        at runCallback (timers.js:672:20)
        at tryOnImmediate (timers.js:645:5)
        at processImmediate [as _immediateCallback] (timers.js:617:5)

@hultberg
Copy link

@50Wliu Any news on this issue? 😄

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

4 participants