Skip to content

The api workspace.applyEdit drops the TextEdit if there is a RenameFile later #77735

@testforstephen

Description

@testforstephen

I have a WorkspaceEdit as below:

A simplified sample:
{
documentChanges: [
TextEdit to file1,
TextEdit to file2,
TextEdit to file1,
Move file1 to file1New
]
}

A real WorkspaceEdit for apply

{
    "changes": {},
    "documentChanges": [
        {
            "textDocument": {
                "version": 0,
                "uri": "file:///C:/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/XMLCodeLens.java"
            },
            "edits": [
                {
                    "range": {
                        "start": {
                            "line": 16,
                            "character": 47
                        },
                        "end": {
                            "line": 17,
                            "character": 43
                        }
                    },
                    "newText": "\r\nimport org.eclipse.lsp4xml.services.CodeLensRequest;"
                }
            ]
        },
        {
            "textDocument": {
                "version": 0,
                "uri": "file:///C:/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/XMLLanguageService.java"
            },
            "edits": [
                {
                    "range": {
                        "start": {
                            "line": 44,
                            "character": 42
                        },
                        "end": {
                            "line": 44,
                            "character": 42
                        }
                    },
                    "newText": "\r\nimport org.eclipse.lsp4xml.dom.XMLCodeLens;"
                }
            ]
        },
        {
            "textDocument": {
                "version": 0,
                "uri": "file:///C:/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/XMLCodeLens.java"
            },
            "edits": [
                {
                    "range": {
                        "start": {
                            "line": 10,
                            "character": 8
                        },
                        "end": {
                            "line": 10,
                            "character": 36
                        }
                    },
                    "newText": "org.eclipse.lsp4xml.dom"
                }
            ]
        },
        {
            "oldUri": "file:///C:/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/XMLCodeLens.java",
            "newUri": "file:///C:/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/dom/XMLCodeLens.java",
            "kind": "rename"
        }
    ]
}

Log from the command "Developer: Open Log File... -> Window"

[2019-07-22 17:27:29.179] [renderer11] [debug] _performTextEdits

[{
		"resource": {
			"$mid": 1,
			"external": "file:///c%3A/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/XMLCodeLens.java",
			"path": "/C:/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/XMLCodeLens.java",
			"scheme": "file"
		},
		"edits": [{
				"text": "\r\nimport org.eclipse.lsp4xml.services.CodeLensRequest;",
				"range": {
					"startLineNumber": 17,
					"startColumn": 48,
					"endLineNumber": 18,
					"endColumn": 44
				}
			}
		]
	}, {
		"resource": {
			"$mid": 1,
			"external": "file:///c%3A/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/XMLLanguageService.java",
			"path": "/C:/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/XMLLanguageService.java",
			"scheme": "file"
		},
		"modelVersionId": 3,
		"edits": [{
				"text": "\r\nimport org.eclipse.lsp4xml.dom.XMLCodeLens;",
				"range": {
					"startLineNumber": 45,
					"startColumn": 43,
					"endLineNumber": 45,
					"endColumn": 43
				}
			}
		]
	}, {
		"resource": {
			"$mid": 1,
			"external": "file:///c%3A/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/XMLCodeLens.java",
			"path": "/C:/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/XMLCodeLens.java",
			"scheme": "file"
		},
		"edits": [{
				"text": "org.eclipse.lsp4xml.dom",
				"range": {
					"startLineNumber": 11,
					"startColumn": 9,
					"endLineNumber": 11,
					"endColumn": 37
				}
			}
		]
	}
]

[2019-07-22 17:27:29.184] [renderer11] [debug] _performFileEdits

[{
		"oldUri": {
			"$mid": 1,
			"path": "/C:/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/services/XMLCodeLens.java",
			"scheme": "file"
		},
		"newUri": {
			"$mid": 1,
			"path": "/C:/Work/Debugger/lsp4xml/org.eclipse.lsp4xml/src/main/java/org/eclipse/lsp4xml/dom/XMLCodeLens.java",
			"scheme": "file"
		}
	}
]

The edits are supposed to be applied by order, the text edits for the old file should be applied first, then move to the new file.

But actually the change for file2 is always applied correctly, but sometimes the text changes for file1 don't take effect. Especially when file1 is not opened in VS Code before applying, the text changes for file1 are often dropped. Besides, if i move the same file back and forth, it can be easily reproduced.

Metadata

Metadata

Assignees

Labels

bugIssue identified by VS Code Team member as probable bugfile-ioFile I/OverifiedVerification succeeded

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions