private bool GenerateStepDefinitionSkeleton(GherkinEditorContext editorContext) { var bindingMatchService = GetBindingMatchService(editorContext.LanguageService); if (bindingMatchService == null) { return(false); } var fileScope = editorContext.LanguageService.GetFileScope(waitForLatest: true); if (fileScope == null) { return(false); } var featureTitle = GetFeatureTitle(fileScope); var bindingCulture = editorContext.ProjectScope.SpecFlowConfiguration.BindingCulture ?? fileScope.GherkinDialect.CultureInfo; var steps = GetUnboundSteps(bindingMatchService, fileScope, bindingCulture).ToArray(); if (steps.Length == 0) { MessageBox.Show("All steps are bound!", "Generate step definition skeleton"); return(true); } var specFlowProject = ((VsProjectScope)editorContext.ProjectScope).Project; var defaultLanguage = VsProjectScope.GetTargetLanguage(specFlowProject); var stepDefinitionSkeletonStyle = editorContext.ProjectScope.SpecFlowConfiguration.StepDefinitionSkeletonStyle; using (var skeletonGeneratorForm = new GenerateStepDefinitionSkeletonForm(featureTitle, steps, specFlowProject, stepDefinitionSkeletonStyle, defaultLanguage, dte)) { skeletonGeneratorForm.OnPreview = (form) => { var skeleton = stepDefinitionSkeletonProvider.GetBindingClassSkeleton( defaultLanguage, form.SelectedSteps, "MyNamespace", form.ClassName, form.Style, bindingCulture); MessageBox.Show(skeleton, "Step definition skeleton preview"); }; skeletonGeneratorForm.OnCopy = (form) => { var skeleton = string.Join(Environment.NewLine, form.SelectedSteps.Select(si => stepDefinitionSkeletonProvider.GetStepDefinitionSkeleton( defaultLanguage, si, form.Style, bindingCulture)).Distinct()).Indent(StepDefinitionSkeletonProvider.METHOD_INDENT); Clipboard.SetText(skeleton); return(true); }; skeletonGeneratorForm.OnGenerate = (form, targetPath) => { var project = GetTartgetProject(targetPath, specFlowProject); var language = VsProjectScope.GetTargetLanguage(project); var skeleton = stepDefinitionSkeletonProvider.GetBindingClassSkeleton( language, form.SelectedSteps, CalculateNamespace(targetPath, project), form.ClassName, form.Style, bindingCulture); string folder = Path.GetDirectoryName(targetPath); if (folder != null && !Directory.Exists(folder)) { Directory.CreateDirectory(folder); } File.WriteAllText(targetPath, skeleton, Encoding.UTF8); var projectItem = VsxHelper.FindProjectItemByFilePath(project, targetPath); if (projectItem == null) { projectItem = project.ProjectItems.AddFromFile(targetPath); } if (projectItem != null) { projectItem.Open(); } return(true); }; skeletonGeneratorForm.ShowDialog(); } return(true); }