LocalToField doesn't validate the offset until get_changes()
Mantenedores costumam responder em até 7 dias
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 1/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 88/100
Direção de pesquisa
A verificação de offset fica em _is_a_method_local(), chamado a partir de get_changes() em rope/refactor/localtofield.py; os demais refatoramentos em rope/refactor fazem essa verificação em __init__, então compare com eles. Execute o trecho de reprodução da issue para ver o erro aparecer tarde. Está concluído quando o construtor lança RefactoringError para uma variável de nível de módulo e um teste no módulo de testes existente de localtofield cobre isso.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Most refactorings check their offset in the constructor and raise RefactoringError straight away: Rename, create_inline(), MethodObject, IntroduceParameter and UseFunction all do. LocalToField only stores its arguments, so the check happens in get_changes().
Editor integrations build the refactoring object to decide whether to offer it in a menu, and only compute the changes when the user picks it. With LocalToField that shortcut doesn't work: building the object always succeeds, so "Convert local variable to field" is offered everywhere. pylsp-rope offers it this way.
To Reproduce
import pathlib
import tempfile
from rope.base.project import Project
from rope.refactor.localtofield import LocalToField
root = pathlib.Path(tempfile.mkdtemp())
(root / "m.py").write_text("x = 1\n")
project = Project(str(root), ropefolder=None)
refactoring = LocalToField(project, project.get_resource("m.py"), 0)
print("constructor accepted a module-level variable")
refactoring.get_changes()
Output on master (46ebf37), Python 3.13:
constructor accepted a module-level variable
rope.base.exceptions.RefactoringError: Convert local variable to field should be performed on a local variable of a method.
Expected behaviour
The constructor raises the RefactoringError. Moving the _is_a_method_local() check from get_changes() into __init__() would do it, and the check is cheap. I can send a PR with a test if that's acceptable.
Editor information
- Python 3.13
- Rope master 46ebf37 (also 1.14.0)
- Context: rope-language-server issue #19
- Linguagem predominante
- Python
- Estrelas
- 2.2k
- Forks
- 197
- Merge médio
- 2d 13h
- PRs com merge (30d)
- 5
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de python-rope/rope
-
Extract raises IndexError or ModuleSyntaxError instead of RefactoringError for an empty or whitespace-only regionTalvez já em andamento @aliassar assumiu há 1 dia. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
python-rope/rope#926 ·
Mantenedores costumam responder em até 7 dias
-
simplify.real_code blanks t-strings, so renames inside them edit the wrong offsetTalvez já em andamento @sean0407 assumiu há 12 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 83/100
python-rope/rope#913 ·
Mantenedores costumam responder em até 7 dias
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 30/100
python-rope/rope#925 ·
Mantenedores costumam responder em até 7 dias
-
Extract method/variable and introduce parameter don't check whether the new name is already in useTalvez já em andamento @aliassar assumiu hoje. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 62/100
python-rope/rope#924 · 1 comentário ·
Mantenedores costumam responder em até 7 dias
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
python-rope/rope#923 ·
Mantenedores costumam responder em até 7 dias
Todas as issues de python-rope/rope
Issues semelhantes
-
curriculum documentation quality
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
githubnext/gh-aw-workshop#5367 ·
Mantenedores costumam responder em até 3 dias
-
Create Noise Latents ignores randomize_seed and produces the same noise every runTalvez já em andamento @griptapeops assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
griptape-ai/griptape-nodes-library-diffusers#127 ·
Mantenedores costumam responder em até 1 dia
-
Jenkins capacity report: metrics history is lost when archiving a month failsTalvez já em andamento @RaphaelFakhri assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
adoptium/infrastructure#4568 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
huggingface/deep-rl-class#723 ·
-
premises-missing
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
WingedGuardian/GENesis-AGI#3928 ·
Mantenedores costumam responder em até 1 dia