Здравствуйте, artelk, Вы писали:
В целом, надо править компилятор.
Однако, там, года так 3 назад, можно было это дело сделать приблизительно так:
Суть в том, что мы устанавливаем декларациям Location, и добавляем этот Location в DocComments, и они генерируются.
Как я сказал, дело было очень давно — ничего не помню.
По крайней мере, если в этом направлении порыть — думаю можно что-нибудь придумать.
UPD: В общем, задача сводится к тому, что-бы
XmlDump в компиляторе генерировал нужное.
UPD2: Оказывается я уже писал об этом
Генерируем xmldoc из макросовАвтор: fddima
Дата: 18.07.12
.
// module CompileEnv (своё)
mutable _documentLine : int;
public SetDescription(typer : Typer, member : ClassMember.TypeDeclaration, summary : string) : void
{
when (EmitDescriptions)
{
def manager = typer.Manager;
unless (string.IsNullOrEmpty(manager.Options.XmlDocOutputFileName))
{
_documentLine++;
member.Location = Location("_SetDescription_g_", _documentLine, 1, _documentLine, 1);
member.td.Location = member.Location;
manager.DocComments = manager.DocComments.Add(member.Location, $<#<summary>$summary</summary>#>);
}
}
}
public SetDescription(typer : Typer, member : ClassMember, summary : string) : void
{
when (EmitDescriptions)
{
def manager = typer.Manager;
unless (string.IsNullOrEmpty(manager.Options.XmlDocOutputFileName))
{
unless (EmitDebugSources) {
_documentLine++;
member.Location = Location(member.Location, _documentLine, 1);
}
manager.DocComments = manager.DocComments.Add(member.Location, $<#<summary>$summary</summary>#>);
}
}
}
Использовалось как-то так:
// для типа
def typeDecl = <[decl:
[System.CodeDom.Compiler.GeneratedCode($(CompileEnv.CompilerName : string), $(CompileEnv.CompilerVersion : string))]
public partial class $(@class.CliDeclarationName : usesite)
{
}]>;
CompileEnv.SetDescription(typer, typeDecl, @class.Descrpition);
// для члена
def fieldDecl = <[decl: public $(field.Name : usesite) : $(fieldType)
{
get { this.$(backStoreName : usesite) }
set { this.$(backStoreName : usesite) = value; }
} ]>;
def description = if (string.IsNullOrEmpty(field.NameBySpecification)) field.Description else $<#($(field.NameBySpecification)) $(field.Description)#>;
CompileEnv.DefineMember(typeBuilder, fieldDecl);
CompileEnv.SetDescription(typer, fieldDecl, description);