private void AddCreateComponentFromTag(RazorCodeActionContext context, MarkupStartTagSyntax startTag, List <RazorCodeAction> container) { var path = context.Request.TextDocument.Uri.GetAbsoluteOrUNCPath(); path = _filePathNormalizer.Normalize(path); var newComponentPath = Path.Combine(Path.GetDirectoryName(path), $"{startTag.Name.Content}.razor"); if (File.Exists(newComponentPath)) { return; } var actionParams = new CreateComponentCodeActionParams { Uri = context.Request.TextDocument.Uri, Path = newComponentPath, }; var resolutionParams = new RazorCodeActionResolutionParams { Action = LanguageServerConstants.CodeActions.CreateComponentFromTag, Data = actionParams, }; container.Add(new RazorCodeAction() { Title = CreateComponentFromTagTitle, Data = resolutionParams }); }
public async Task Handle_CreateComponent() { // Arrange var documentPath = "c:/Test.razor"; var documentUri = new Uri(documentPath); var contents = $"@page \"/test\""; var codeDocument = CreateCodeDocument(contents); var resolver = new CreateComponentCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument)); var actionParams = new CreateComponentCodeActionParams { Uri = documentUri, Path = "c:/Another.razor", }; var data = JObject.FromObject(actionParams); // Act var workspaceEdit = await resolver.ResolveAsync(data, default); // Assert Assert.NotNull(workspaceEdit); Assert.NotNull(workspaceEdit.DocumentChanges); Assert.Single(workspaceEdit.DocumentChanges); var documentChanges = workspaceEdit.DocumentChanges.ToArray(); var createFileChange = documentChanges[0]; Assert.True(createFileChange.IsCreateFile); }
private void AddCreateComponentFromTag(RazorCodeActionContext context, MarkupStartTagSyntax startTag, List <CommandOrCodeAction> container) { var path = context.Request.TextDocument.Uri.GetAbsoluteOrUNCPath(); path = _filePathNormalizer.Normalize(path); var newComponentPath = Path.Combine(Path.GetDirectoryName(path), $"{startTag.Name.Content}.razor"); if (File.Exists(newComponentPath)) { return; } var actionParams = new CreateComponentCodeActionParams { Uri = context.Request.TextDocument.Uri, Path = newComponentPath, }; var data = JObject.FromObject(actionParams); var resolutionParams = new RazorCodeActionResolutionParams { Action = LanguageServerConstants.CodeActions.CreateComponentFromTag, Data = data, }; var serializedParams = JToken.FromObject(resolutionParams); var arguments = new JArray(serializedParams); container.Add(new CommandOrCodeAction(new Command { Title = "Create component from tag", Name = LanguageServerConstants.RazorCodeActionRunnerCommand, Arguments = arguments, })); }
public async Task Handle_CreateComponentWithNamespace() { // Arrange var documentPath = "c:/Test.razor"; var documentUri = new Uri(documentPath); var contents = $"@page \"/test\"{Environment.NewLine}@namespace Another.Namespace"; var codeDocument = CreateCodeDocument(contents); var resolver = new CreateComponentCodeActionResolver(LegacyDispatcher, CreateDocumentResolver(documentPath, codeDocument)); var actionParams = new CreateComponentCodeActionParams { Uri = documentUri, Path = "c:/Another.razor", }; var data = JObject.FromObject(actionParams); // Act var workspaceEdit = await resolver.ResolveAsync(data, default); // Assert Assert.NotNull(workspaceEdit); Assert.NotNull(workspaceEdit.DocumentChanges); Assert.Equal(2, workspaceEdit.DocumentChanges.Count()); var documentChanges = workspaceEdit.DocumentChanges.ToArray(); var createFileChange = documentChanges[0]; Assert.True(createFileChange.IsCreateFile); var editNewComponentChange = documentChanges[1]; var editNewComponentEdit = editNewComponentChange.TextDocumentEdit.Edits.First(); Assert.Contains("@namespace Another.Namespace", editNewComponentEdit.NewText, StringComparison.Ordinal); }
private void AddCreateComponentFromTag(RazorCodeActionContext context, MarkupStartTagSyntax startTag, List <RazorCodeAction> container) { if (context is null) { return; } if (!context.SupportsFileCreation) { return; } var path = context.Request.TextDocument.Uri.GetAbsoluteOrUNCPath(); path = _filePathNormalizer.Normalize(path); var newComponentPath = Path.Combine(Path.GetDirectoryName(path), $"{startTag.Name.Content}.razor"); if (File.Exists(newComponentPath)) { return; } var actionParams = new CreateComponentCodeActionParams { Uri = context.Request.TextDocument.Uri, Path = newComponentPath, }; var resolutionParams = new RazorCodeActionResolutionParams { Action = LanguageServerConstants.CodeActions.CreateComponentFromTag, Language = LanguageServerConstants.CodeActions.Languages.Razor, Data = actionParams, }; container.Add(new RazorCodeAction() { Title = RazorLS.Resources.Create_Component_FromTag_Title, Data = JToken.FromObject(resolutionParams) }); }