Здравствуйте, 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);
<[ decl:
public class MyClass2
{
/// <summary>
/// This is documentation
/// </summary>
public Prop : string
{
get { "hi" }
}
}
]>
Summary не добавляется в генерируемый Prop. Как быть?
Здравствуйте, artelk, Вы писали:
A>Ок, ясно. А как их задать?
Например поправить компилятор
Здравствуйте, _NN_, Вы писали:
_NN>Здравствуйте, artelk, Вы писали:
A>>Ок, ясно. А как их задать?
_NN>Например поправить компилятор
Не, интим не предлагать...
Похоже проще рядом файл mylib.XML сгенерить, куда в нужном формате камменты вписать.