diff --git a/haxe_libraries/rename.hxml b/haxe_libraries/rename.hxml index 6ae86170..528b0b6e 100644 --- a/haxe_libraries/rename.hxml +++ b/haxe_libraries/rename.hxml @@ -1,3 +1,3 @@ -# @install: lix --silent download "gh://github.com/HaxeCheckstyle/haxe-rename#d069790b47a68b1adf27fa55e9475ca0f0cb02f0" into rename/2.3.1/github/d069790b47a68b1adf27fa55e9475ca0f0cb02f0 --cp ${HAXE_LIBCACHE}/rename/2.3.1/github/d069790b47a68b1adf27fa55e9475ca0f0cb02f0/src +# @install: lix --silent download "gh://github.com/HaxeCheckstyle/haxe-rename#32b556bf0fe311543ec2f92c7f5acbb28f9c846b" into rename/2.3.1/github/32b556bf0fe311543ec2f92c7f5acbb28f9c846b +-cp ${HAXE_LIBCACHE}/rename/2.3.1/github/32b556bf0fe311543ec2f92c7f5acbb28f9c846b/src -D rename=2.3.1 \ No newline at end of file diff --git a/src/haxeLanguageServer/Context.hx b/src/haxeLanguageServer/Context.hx index c3ff513d..7572ef02 100644 --- a/src/haxeLanguageServer/Context.hx +++ b/src/haxeLanguageServer/Context.hx @@ -438,6 +438,7 @@ class Context { if (isUriSupported(uri)) { publishDiagnostics(uri); invalidated.remove(uri.toString()); + refactorCache.invalidateFile(uri.toFsPath().toString()); } } diff --git a/src/haxeLanguageServer/features/haxe/refactoring/RefactorCache.hx b/src/haxeLanguageServer/features/haxe/refactoring/RefactorCache.hx index bd3b17ce..d3971beb 100644 --- a/src/haxeLanguageServer/features/haxe/refactoring/RefactorCache.hx +++ b/src/haxeLanguageServer/features/haxe/refactoring/RefactorCache.hx @@ -17,6 +17,7 @@ import refactor.refactor.CanRefactorContext; import refactor.refactor.RefactorContext; import refactor.rename.CanRenameContext; import refactor.rename.RenameContext; +import sys.FileSystem; import tokentree.TokenTree; using haxeLanguageServer.helper.PathHelper; @@ -160,7 +161,25 @@ class RefactorCache { cache.invalidateFile(uri, nameMap, typeList); fileList.removeFile(uri); - updateSingleFileCache(uri); + + if (fileList.wasRecentlyRenamed(uri)) { + // delay for (potentially) recently renamed files, because vscode sends us + // a notifcation of edits in that file but not when it gets renamed. + // so in case of a type rename we don't want to end up having the renamed type twice: + // once for `pack.NewtypeName` and once for `pack.OldTypeName.NewTypeName` + // (helps solve renaming FlxSprite -> FlxCola -> FlxSprite) + haxe.Timer.delay(() -> { + if (FileSystem.exists(uri)) { + updateSingleFileCache(uri); + } + }, 250); + onResolve(); + return; + } + + if (FileSystem.exists(uri)) { + updateSingleFileCache(uri); + } onResolve(); }