Browse Source

Code cleanup

pull/1928/head
duckdoom5 4 months ago
parent
commit
1978e3b394
  1. 23
      src/AST/Comment.cs
  2. 4
      src/CppParser/Comments.cpp
  3. 89
      src/Generator/Generators/CSharp/CSharpCommentPrinter.cs
  4. 4
      src/Generator/Generators/CodeGenerator.cs
  5. 12
      src/Generator/Passes/CleanCommentsPass.cs
  6. 2
      src/Generator/Passes/FixParameterUsageFromComments.cs
  7. 4
      src/Generator/Utils/HtmlEncoder.cs

23
src/AST/Comment.cs

@ -109,7 +109,7 @@ namespace CppSharp.AST
T VisitTParamCommand(TParamCommandComment comment); T VisitTParamCommand(TParamCommandComment comment);
T VisitVerbatimBlock(VerbatimBlockComment comment); T VisitVerbatimBlock(VerbatimBlockComment comment);
T VisitVerbatimLine(VerbatimLineComment comment); T VisitVerbatimLine(VerbatimLineComment comment);
T VisitParagraphCommand(ParagraphComment comment); T VisitParagraph(ParagraphComment comment);
T VisitFull(FullComment comment); T VisitFull(FullComment comment);
T VisitHTMLStartTag(HTMLStartTagComment comment); T VisitHTMLStartTag(HTMLStartTagComment comment);
T VisitHTMLEndTag(HTMLEndTagComment comment); T VisitHTMLEndTag(HTMLEndTagComment comment);
@ -129,20 +129,13 @@ namespace CppSharp.AST
public static string GetMultiLineCommentPrologue(CommentKind kind) public static string GetMultiLineCommentPrologue(CommentKind kind)
{ {
switch (kind) return kind switch
{ {
case CommentKind.BCPL: CommentKind.BCPL or CommentKind.BCPLExcl => "//",
case CommentKind.BCPLExcl: CommentKind.C or CommentKind.JavaDoc or CommentKind.Qt => " *",
return "//"; CommentKind.BCPLSlash => "///",
case CommentKind.C: _ => throw new ArgumentOutOfRangeException()
case CommentKind.JavaDoc: };
case CommentKind.Qt:
return " *";
case CommentKind.BCPLSlash:
return "///";
default:
throw new ArgumentOutOfRangeException();
}
} }
public static string GetLineCommentPrologue(CommentKind kind) public static string GetLineCommentPrologue(CommentKind kind)
@ -375,7 +368,7 @@ namespace CppSharp.AST
public override void Visit<T>(ICommentVisitor<T> visitor) public override void Visit<T>(ICommentVisitor<T> visitor)
{ {
visitor.VisitParagraphCommand(this); visitor.VisitParagraph(this);
} }
} }

4
src/CppParser/Comments.cpp

@ -263,8 +263,8 @@ void Parser::HandleComments(const clang::Decl* D, Declaration* Decl)
{ {
using namespace clang; using namespace clang;
const clang::RawComment* RC = 0; const clang::RawComment* RC = c->getASTContext().getRawCommentForAnyRedecl(D);
if (!(RC = c->getASTContext().getRawCommentForAnyRedecl(D))) if (!RC)
return; return;
auto RawComment = WalkRawComment(RC); auto RawComment = WalkRawComment(RC);

89
src/Generator/Generators/CSharp/CSharpCommentPrinter.cs

@ -11,7 +11,7 @@ namespace CppSharp.Generators.CSharp
{ {
public static void Print(this ITextGenerator textGenerator, Comment comment, CommentKind kind) public static void Print(this ITextGenerator textGenerator, Comment comment, CommentKind kind)
{ {
var sections = new List<Section> { new Section(CommentElement.Summary) }; var sections = new List<Section>();
GetCommentSections(comment, sections); GetCommentSections(comment, sections);
foreach (var section in sections) foreach (var section in sections)
TrimSection(section); TrimSection(section);
@ -23,14 +23,17 @@ namespace CppSharp.Generators.CSharp
switch (comment.Kind) switch (comment.Kind)
{ {
case DocumentationCommentKind.FullComment: case DocumentationCommentKind.FullComment:
var fullComment = (FullComment)comment; {
foreach (var block in fullComment.Blocks) foreach (var block in ((FullComment)comment).Blocks)
block.GetCommentSections(sections); block.GetCommentSections(sections);
break; break;
}
case DocumentationCommentKind.BlockCommandComment: case DocumentationCommentKind.BlockCommandComment:
{
var blockCommandComment = (BlockCommandComment)comment; var blockCommandComment = (BlockCommandComment)comment;
if (blockCommandComment.ParagraphComment == null) if (blockCommandComment.ParagraphComment == null)
break; break;
switch (blockCommandComment.CommandKind) switch (blockCommandComment.CommandKind)
{ {
case CommentCommandKind.Brief: case CommentCommandKind.Brief:
@ -49,6 +52,7 @@ namespace CppSharp.Generators.CSharp
if (inlineContentComment.HasTrailingNewline) if (inlineContentComment.HasTrailingNewline)
lastBlockSection.NewLine(); lastBlockSection.NewLine();
} }
break; break;
default: default:
sections.Add(new Section(CommentElement.Remarks)); sections.Add(new Section(CommentElement.Remarks));
@ -56,31 +60,30 @@ namespace CppSharp.Generators.CSharp
break; break;
} }
break; break;
}
case DocumentationCommentKind.ParamCommandComment: case DocumentationCommentKind.ParamCommandComment:
{
var paramCommandComment = (ParamCommandComment)comment; var paramCommandComment = (ParamCommandComment)comment;
var param = new Section(CommentElement.Param); var param = new Section(CommentElement.Param);
sections.Add(param); sections.Add(param);
if (paramCommandComment.Arguments.Count > 0) if (paramCommandComment.Arguments.Count > 0)
param.Attributes.Add( param.Attributes.Add($"name=\"{paramCommandComment.Arguments[0].Text}\"");
string.Format("name=\"{0}\"", paramCommandComment.Arguments[0].Text));
if (paramCommandComment.ParagraphComment != null) if (paramCommandComment.ParagraphComment != null)
{
foreach (var inlineContentComment in paramCommandComment.ParagraphComment.Content) foreach (var inlineContentComment in paramCommandComment.ParagraphComment.Content)
{ {
inlineContentComment.GetCommentSections(sections); inlineContentComment.GetCommentSections(sections);
if (inlineContentComment.HasTrailingNewline) if (inlineContentComment.HasTrailingNewline)
sections.Last().NewLine(); sections.Last().NewLine();
} }
}
if (!string.IsNullOrEmpty(sections.Last().CurrentLine.ToString())) if (!string.IsNullOrEmpty(sections.Last().CurrentLine.ToString()))
sections.Add(new Section(CommentElement.Remarks)); sections.Add(new Section(CommentElement.Remarks));
break; break;
case DocumentationCommentKind.TParamCommandComment: }
break;
case DocumentationCommentKind.VerbatimBlockComment:
break;
case DocumentationCommentKind.VerbatimLineComment:
break;
case DocumentationCommentKind.ParagraphComment: case DocumentationCommentKind.ParagraphComment:
var summaryParagraph = sections.Count == 1; var summaryParagraph = sections.Count == 1;
var paragraphComment = (ParagraphComment)comment; var paragraphComment = (ParagraphComment)comment;
@ -101,22 +104,21 @@ namespace CppSharp.Generators.CSharp
sections.RemoveRange(1, sections.Count - 1); sections.RemoveRange(1, sections.Count - 1);
sections.Add(new Section(CommentElement.Remarks)); sections.Add(new Section(CommentElement.Remarks));
} }
break; break;
case DocumentationCommentKind.HTMLTagComment: }
break;
case DocumentationCommentKind.HTMLStartTagComment:
break;
case DocumentationCommentKind.HTMLEndTagComment:
break;
case DocumentationCommentKind.TextComment: case DocumentationCommentKind.TextComment:
var lastTextsection = sections.Last(); {
lastTextsection.CurrentLine.Append(GetText(comment, var lastTextSection = sections.Last();
lastTextsection.Type == CommentElement.Returns || lastTextSection.CurrentLine
lastTextsection.Type == CommentElement.Param).Trim()); .Append(
break; GetText(comment, lastTextSection.Type is CommentElement.Returns or CommentElement.Param)
case DocumentationCommentKind.InlineContentComment: .TrimStart()
);
break; break;
}
case DocumentationCommentKind.InlineCommandComment: case DocumentationCommentKind.InlineCommandComment:
{
var lastInlineSection = sections.Last(); var lastInlineSection = sections.Last();
var inlineCommand = (InlineCommandComment)comment; var inlineCommand = (InlineCommandComment)comment;
@ -125,9 +127,27 @@ namespace CppSharp.Generators.CSharp
var argText = $" <c>{inlineCommand.Arguments[0].Text}</c> "; var argText = $" <c>{inlineCommand.Arguments[0].Text}</c> ";
lastInlineSection.CurrentLine.Append(argText); lastInlineSection.CurrentLine.Append(argText);
} }
break;
}
case DocumentationCommentKind.HTMLStartTagComment:
{
break;
}
case DocumentationCommentKind.HTMLEndTagComment:
{
break; break;
}
case DocumentationCommentKind.HTMLTagComment:
case DocumentationCommentKind.TParamCommandComment:
case DocumentationCommentKind.VerbatimBlockComment:
case DocumentationCommentKind.VerbatimLineComment:
case DocumentationCommentKind.InlineContentComment:
case DocumentationCommentKind.VerbatimBlockLineComment: case DocumentationCommentKind.VerbatimBlockLineComment:
case DocumentationCommentKind.BlockContentComment:
break; break;
default:
throw new ArgumentOutOfRangeException();
} }
} }
@ -139,10 +159,10 @@ namespace CppSharp.Generators.CSharp
text = text.Trim(); text = text.Trim();
if (Helpers.RegexTag.IsMatch(text)) if (Helpers.RegexTag.IsMatch(text))
return String.Empty; return string.Empty;
return HtmlEncoder.HtmlEncode( return HtmlEncoder.HtmlEncode(
text.Length > 1 && text[0] == ' ' && text[1] != ' ' ? text.Substring(1) : text); text.Length > 1 && text[0] == ' ' && text[1] != ' ' ? text[1..] : text);
} }
private static void TrimSection(Section section) private static void TrimSection(Section section)
@ -166,22 +186,25 @@ namespace CppSharp.Generators.CSharp
private static void FormatComment(ITextGenerator textGenerator, List<Section> sections, CommentKind kind) private static void FormatComment(ITextGenerator textGenerator, List<Section> sections, CommentKind kind)
{ {
var commentPrefix = Comment.GetMultiLineCommentPrologue(kind);
sections.Sort((x, y) => x.Type.CompareTo(y.Type)); sections.Sort((x, y) => x.Type.CompareTo(y.Type));
var remarks = sections.Where(s => s.Type == CommentElement.Remarks).ToList(); var remarks = sections.Where(s => s.Type == CommentElement.Remarks).ToList();
if (remarks.Any()) if (remarks.Count != 0)
remarks.First().GetLines().AddRange(remarks.Skip(1).SelectMany(s => s.GetLines())); remarks.First().GetLines().AddRange(remarks.Skip(1).SelectMany(s => s.GetLines()));
if (remarks.Count > 1) if (remarks.Count > 1)
sections.RemoveRange(sections.IndexOf(remarks.First()) + 1, remarks.Count - 1); sections.RemoveRange(sections.IndexOf(remarks.First()) + 1, remarks.Count - 1);
var commentPrefix = Comment.GetMultiLineCommentPrologue(kind);
foreach (var section in sections.Where(s => s.HasLines)) foreach (var section in sections.Where(s => s.HasLines))
{ {
var lines = section.GetLines(); var lines = section.GetLines();
var tag = section.Type.ToString().ToLowerInvariant(); var tag = section.Type.ToString().ToLowerInvariant();
var attributes = string.Empty; var attributes = string.Empty;
if (section.Attributes.Any()) if (section.Attributes.Count != 0)
attributes = ' ' + string.Join(" ", section.Attributes); attributes = ' ' + string.Join(" ", section.Attributes);
textGenerator.Write($"{commentPrefix} <{tag}{attributes}>"); textGenerator.Write($"{commentPrefix} <{tag}{attributes}>");
if (lines.Count == 1) if (lines.Count == 1)
{ {
@ -205,13 +228,13 @@ namespace CppSharp.Generators.CSharp
Type = type; Type = type;
} }
public StringBuilder CurrentLine { get; set; } = new StringBuilder(); public StringBuilder CurrentLine { get; set; } = new();
public CommentElement Type { get; set; } public CommentElement Type { get; set; }
public List<string> Attributes { get; } = new List<string>(); public List<string> Attributes { get; init; } = new();
private List<string> lines { get; } = new List<string>(); private List<string> lines { get; } = new();
public bool HasLines => lines.Any(); public bool HasLines => lines.Any();

4
src/Generator/Generators/CodeGenerator.cs

@ -1333,8 +1333,8 @@ namespace CppSharp.Generators
public static class Helpers public static class Helpers
{ {
public static Regex RegexTag = new Regex(@"^(<|</)[a-zA-Z][\w\-]*?>?$"); public static Regex RegexTag = new(@"^(<|</)[a-zA-Z][\w\-]*?>?$");
public static Regex RegexCommentCommandLeftover = new Regex(@"^\S*"); public static Regex RegexCommentCommandLeftover = new(@"^\S*");
public static readonly string InternalStruct = Generator.GeneratedIdentifier("Internal"); public static readonly string InternalStruct = Generator.GeneratedIdentifier("Internal");
public static readonly string InstanceField = Generator.GeneratedIdentifier("instance"); public static readonly string InstanceField = Generator.GeneratedIdentifier("instance");
public static readonly string InstanceIdentifier = Generator.GeneratedIdentifier("Instance"); public static readonly string InstanceIdentifier = Generator.GeneratedIdentifier("Instance");

12
src/Generator/Passes/CleanCommentsPass.cs

@ -21,12 +21,11 @@ namespace CppSharp.Passes
if (!base.VisitDeclaration(decl)) if (!base.VisitDeclaration(decl))
return false; return false;
if (decl.Comment != null) if (decl.Comment == null)
{ return true;
var fullComment = decl.Comment.FullComment;
VisitFull(fullComment);
} var fullComment = decl.Comment.FullComment;
VisitFull(fullComment);
return true; return true;
} }
@ -37,6 +36,7 @@ namespace CppSharp.Passes
return true; return true;
} }
#region Comments Visit #region Comments Visit
public bool VisitHTMLEndTag(HTMLEndTagComment comment) => true; public bool VisitHTMLEndTag(HTMLEndTagComment comment) => true;
@ -44,7 +44,7 @@ namespace CppSharp.Passes
public bool VisitInlineCommand(InlineCommandComment comment) => true; public bool VisitInlineCommand(InlineCommandComment comment) => true;
public bool VisitParagraphCommand(ParagraphComment comment) public bool VisitParagraph(ParagraphComment comment)
{ {
for (int i = 0; i < comment.Content.Count; i++) for (int i = 0; i < comment.Content.Count; i++)
{ {

2
src/Generator/Passes/FixParameterUsageFromComments.cs

@ -71,7 +71,7 @@ namespace CppSharp.Passes
return true; return true;
} }
public bool VisitParagraphCommand(ParagraphComment comment) public bool VisitParagraph(ParagraphComment comment)
{ {
return true; return true;
} }

4
src/Generator/Utils/HtmlEncoder.cs

@ -53,7 +53,7 @@ namespace System.Web.Util
return null; return null;
if (s.Length == 0) if (s.Length == 0)
return String.Empty; return string.Empty;
bool needEncode = s.Any(c => c == '&' || c == '"' || c == '<' || c == '>' || c > 159); bool needEncode = s.Any(c => c == '&' || c == '"' || c == '<' || c == '>' || c > 159);
@ -93,7 +93,7 @@ namespace System.Web.Util
{ {
output.Append("&#"); output.Append("&#");
output.Append(((int)ch).ToString(CultureInfo.InvariantCulture)); output.Append(((int)ch).ToString(CultureInfo.InvariantCulture));
output.Append(";"); output.Append(';');
} }
else else
output.Append(ch); output.Append(ch);

Loading…
Cancel
Save