mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-61107: Fix rename in Django url segments
There are two options for injections in Django routes: DjangoUrlPathFile and DjangoRegexpFile (new), which prevents platform mechanisms from finding references for renaming UrlPathSegments which we've added with Django Endpoint plugin support (PY-49823). Now we add element manipulators to handle content changes and do rename. GitOrigin-RevId: 249d733d82814ab27cf78537b95db28fcdba0ada
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b26d7c9740
commit
780fd6c1de
@@ -0,0 +1,23 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.jetbrains.python.codeInsight.regexp
|
||||
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.util.IncorrectOperationException
|
||||
import org.intellij.lang.regexp.RegExpFile
|
||||
|
||||
class DjangoRegexpFile(viewProvider: FileViewProvider) : RegExpFile(viewProvider, PythonRegexpLanguage.INSTANCE), ContributedReferenceHost {
|
||||
override fun getReferences(): Array<PsiReference> = PsiReferenceService.getService().getContributedReferences(this)
|
||||
}
|
||||
|
||||
|
||||
class DjangoRegexpUrlPathFileManipulator : AbstractElementManipulator<DjangoRegexpFile>() {
|
||||
@Throws(IncorrectOperationException::class)
|
||||
override fun handleContentChange(file: DjangoRegexpFile, range: TextRange, newContent: String): DjangoRegexpFile {
|
||||
val document = FileDocumentManager.getInstance().getDocument(file.virtualFile)
|
||||
document!!.replaceString(range.startOffset, range.endOffset, newContent)
|
||||
PsiDocumentManager.getInstance(file.project).commitDocument(document)
|
||||
return file
|
||||
}
|
||||
}
|
||||
+5
-2
@@ -7,7 +7,10 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.FileViewProvider;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.tree.IFileElementType;
|
||||
import org.intellij.lang.regexp.*;
|
||||
import org.intellij.lang.regexp.RegExpCapability;
|
||||
import org.intellij.lang.regexp.RegExpLexer;
|
||||
import org.intellij.lang.regexp.RegExpParser;
|
||||
import org.intellij.lang.regexp.RegExpParserDefinition;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.EnumSet;
|
||||
@@ -40,6 +43,6 @@ public class PythonRegexpParserDefinition extends RegExpParserDefinition {
|
||||
|
||||
@Override
|
||||
public @NotNull PsiFile createFile(@NotNull FileViewProvider viewProvider) {
|
||||
return new RegExpFile(viewProvider, PythonRegexpLanguage.INSTANCE);
|
||||
return new DjangoRegexpFile(viewProvider);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user