@@ -24,6 +24,7 @@ import org.tonstudio.tact.ide.documentation.DocumentationUtils.asBraces
2424import org.tonstudio.tact.ide.documentation.DocumentationUtils.asBuiltin
2525import org.tonstudio.tact.ide.documentation.DocumentationUtils.asComment
2626import org.tonstudio.tact.ide.documentation.DocumentationUtils.asConst
27+ import org.tonstudio.tact.ide.documentation.DocumentationUtils.asContract
2728import org.tonstudio.tact.ide.documentation.DocumentationUtils.asField
2829import org.tonstudio.tact.ide.documentation.DocumentationUtils.asFunction
2930import org.tonstudio.tact.ide.documentation.DocumentationUtils.asIdentifier
@@ -37,6 +38,7 @@ import org.tonstudio.tact.ide.documentation.DocumentationUtils.asStruct
3738import org.tonstudio.tact.ide.documentation.DocumentationUtils.asTrait
3839import org.tonstudio.tact.lang.TactSyntaxHighlighter
3940import org.tonstudio.tact.lang.doc.psi.TactDocComment
41+ import org.tonstudio.tact.lang.psi.impl.TactPsiImplUtil.getInheritedTraitsBase
4042
4143private fun StringBuilder.generateOwnerDpc (element : TactNamedElement ) {
4244 val owner = element.getOwner() ? : return
@@ -325,6 +327,49 @@ fun TactFieldDefinition.generateDoc(): String {
325327 }
326328}
327329
330+ fun TactContractDeclaration.generateDoc (): String {
331+ return buildString {
332+ append(DocumentationMarkup .DEFINITION_START )
333+
334+ part(" contract" , asKeyword)
335+ part(name, asContract)
336+
337+ val inheritedTraits = contractType.getWithClause()?.typeList ? : emptyList()
338+ formatInheritTraits(inheritedTraits)
339+
340+ append(DocumentationMarkup .DEFINITION_END )
341+ generateCommentsPart(this @generateDoc)
342+ }
343+ }
344+
345+ fun TactTraitDeclaration.generateDoc (): String {
346+ return buildString {
347+ append(DocumentationMarkup .DEFINITION_START )
348+
349+ part(" trait" , asKeyword)
350+ part(name, asTrait)
351+
352+ val inheritedTraits = traitType.getWithClause()?.typeList ? : emptyList()
353+ formatInheritTraits(inheritedTraits)
354+
355+ append(DocumentationMarkup .DEFINITION_END )
356+ generateCommentsPart(this @generateDoc)
357+ }
358+ }
359+
360+ private fun StringBuilder.formatInheritTraits (inheritedTraits : List <TactType >) {
361+ val filtered = inheritedTraits.filter { it.text != " BaseTrait" }
362+ if (filtered.isEmpty()) return
363+
364+ colorize(" with " , asKeyword)
365+ filtered.forEachIndexed { index, trait ->
366+ colorize(trait.text, asTrait)
367+ if (index != filtered.size - 1 ) {
368+ append(" , " )
369+ }
370+ }
371+ }
372+
328373fun TactPrimitiveDeclaration.generateDoc (): String {
329374 return buildString {
330375 append(DocumentationMarkup .DEFINITION_START )
0 commit comments