/// <summary> /// Creates a new DeclarationHeader for the declaration and assigns it to the declaration. /// </summary> /// <param name="declaration"> /// The declaration to create the header for. /// </param> /// <param name="docConfig"> /// Provides the configuration for the current ProjectFile. /// </param> /// <returns> /// A DeclarationHeader for the declaration passed in. /// </returns> public static DeclarationHeader CreateNewHeader(IDeclaration declaration, DocumentationRulesConfiguration docConfig) { IFile file = declaration.GetContainingFile(); using (WriteLockCookie.Create(file.IsPhysical())) { IDeclaration declarationTreeNode = declaration; IContextBoundSettingsStore settingsStore = PsiSourceFileExtensions.GetSettingsStore(null, declaration.GetSolution()); bool useSingleLineDeclarationComments = settingsStore.GetValue((StyleCopOptionsSettingsKey key) => key.UseSingleLineDeclarationComments); string middleText = useSingleLineDeclarationComments ? string.Empty : Environment.NewLine; string emptyDocHeader = string.Format("<summary>{0}</summary>", middleText); if (!(declarationTreeNode is IMultipleDeclarationMember)) { emptyDocHeader = CreateDocumentationForElement((IDocCommentBlockOwnerNode)declaration, docConfig); emptyDocHeader = emptyDocHeader.Substring(0, emptyDocHeader.Length - Environment.NewLine.Length); } string header = LayoutDocumentationHeader(emptyDocHeader, declaration); IDocCommentBlockNode newDocCommentNode = Utils.CreateDocCommentBlockNode(file, header); IDocCommentBlockOwnerNode docCommentBlockOwnerNode = Utils.GetDocCommentBlockOwnerNodeForDeclaration(declaration); if (docCommentBlockOwnerNode != null) { docCommentBlockOwnerNode.SetDocCommentBlockNode(newDocCommentNode); } return(new DeclarationHeader(declaration)); } }
/// <summary> /// Creates a new DeclarationHeader for the declaration and assigns it to the declaration. /// </summary> /// <param name="declaration"> /// The declaration to create the header for. /// </param> /// <param name="docConfig"> /// Provides the configuration for the current ProjectFile. /// </param> /// <returns> /// A DeclarationHeader for the declaration passed in. /// </returns> public static DeclarationHeader CreateNewHeader(IDeclaration declaration, DocumentationRulesConfiguration docConfig) { IFile file = declaration.GetContainingFile(); using (WriteLockCookie.Create(file.IsPhysical())) { IDeclaration declarationTreeNode = declaration; string middleText = StyleCopOptions.Instance.UseSingleLineDeclarationComments ? string.Empty : Environment.NewLine; string emptyDocHeader = string.Format("<summary>{0}</summary>", middleText); if (!(declarationTreeNode is IMultipleDeclarationMember)) { emptyDocHeader = CreateDocumentationForElement((IDocCommentBlockOwnerNode)declaration, docConfig); emptyDocHeader = emptyDocHeader.Substring(0, emptyDocHeader.Length - Environment.NewLine.Length); } string header = LayoutDocumentationHeader(emptyDocHeader); IDocCommentBlockNode newDocCommentNode = Utils.CreateDocCommentBlockNode(file, header); IDocCommentBlockOwnerNode docCommentBlockOwnerNode = Utils.GetDocCommentBlockOwnerNodeForDeclaration(declaration); if (docCommentBlockOwnerNode != null) { docCommentBlockOwnerNode.SetDocCommentBlockNode(newDocCommentNode); } return(new DeclarationHeader(declaration)); } }
/// <summary> /// Our internal implementation of the bulb item which assumes it is running within a transaction /// </summary> /// <param name="solution">The currently open solution</param> /// <param name="textControl">The text control that is currently open</param> public void ExecuteEx(ISolution solution, ITextControl textControl) { // Get the comment block owner (ie the part of the declaration which will own the comment). IDocCommentBlockOwnerNode docCommentBlockOwnerNode = XmlDocTemplateUtil.FindDocCommentOwner(_declaration as ITypeMemberDeclaration); // If we didn't get an owner then give up if (docCommentBlockOwnerNode == null) { return; } // We got one // Ask resharper to create the xml for us. int myCursorOffset; string text = XmlDocTemplateUtil.GetDocTemplate(docCommentBlockOwnerNode, out myCursorOffset); // Get a factory which can create elements in the C# docs CSharpElementFactory factory = CSharpElementFactory.GetInstance(docCommentBlockOwnerNode.GetPsiModule()); // Create the comment block IDocCommentBlockNode comment = factory.CreateDocCommentBlock(text); // And set the comment on the declaration. docCommentBlockOwnerNode.SetDocCommentBlockNode(comment); }
public static void SetDocComment(IDocCommentBlockOwnerNode docCommentBlockOwnerNode, string text, ISolution solution) { text = String.Format("///{0}\r\nclass Tmp {{}}", text.Replace("\n", "\n///")); ICSharpTypeMemberDeclaration declaration = CSharpElementFactory.GetInstance(docCommentBlockOwnerNode.GetPsiModule()).CreateTypeMemberDeclaration(text, new object[0]); docCommentBlockOwnerNode.SetDocCommentBlockNode( ((IDocCommentBlockOwnerNode)declaration).GetDocCommentBlockNode()); }