your-tools / ruplacer

Find and replace text in source files
BSD 3-Clause "New" or "Revised" License
426 stars 25 forks source link

`--ignored` seems not to work #84

Open Masynchin opened 2 years ago

Masynchin commented 2 years ago

Problem

I want to patch code of ignored files (dependencies of my python project). But there is no difference with or without --ignored - Error: nothing found to replace. At the same time ripgrep correctly finds provided pattern.

To reproduce

Libs used:

It might be overcomplicated, but it is my real situation. Steps to reproduce:

mkdir reproduce
cd reproduce

git init
echo venv/ > .gitignore

python3 -m venv venv
source venv/bin/activate
pip install "Django==1.11.29"

# no any output since all files ignored by gitignore:
rg 'from collections import Iterable'
ruplacer 'from collections import Iterable' 'from collections.abc import Iterable'

# shows expected
rg 'from collections import Iterable' --no-ignore

# doesn't shows expected
ruplacer 'from collections import Iterable' 'from collections.abc import Iterable' --ignored
dmerejkowsky commented 2 years ago

Interesting. I guess if we use the ignore crate we better keep the same flags has ripgrep with the same behavior ...

There's a workaround for this specific case, though:

$ cd venv
$ ruplacer 'from collections import Iterable' 'from collections.abc import Iterable'

Also, (sorry, I have to ask) - are your really trying to use Django 1.11 with Python 3.10? Because in that case, the problem with abc is going to be the least of your problems ...

Masynchin commented 2 years ago

Also, (sorry, I have to ask) - are you really trying to use Django 1.11 with Python 3.10?

Yes, this was my task from some course that requires to use Django of 1.11 version. I may used python of another version but create script that removes incompatible parts was easier. That is how I found this tool (there was also sd but it seems more complicated to use for editing files).

Masynchin commented 2 years ago

There's a workaround for this specific case

In the reproduce steps I simplified gitignore creating process. Actualy there is default gitignore for python projects. So I should also do cd lib (which is also ignored) and then script can be executed.