summaryrefslogtreecommitdiffstats
path: root/source/slang/slang.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2021-03-11 17:08:08 -0500
committerGitHub <noreply@github.com>2021-03-11 17:08:08 -0500
commit5bcb342962634e9c36fe399a822e685bb2eb8d76 (patch)
tree7f621e2932e3b7eb6d1c5121f382bdd23a8f5855 /source/slang/slang.cpp
parent4b74f994bf94217f174cf0fb02ed94abe62e9d7c (diff)
stdlib documentation (#1745)
* #include an absolute path didn't work - because paths were taken to always be relative. * Split out AST 'printing'. * Replace listener with List<Section> * Section -> Part. * Kind -> Type Flags -> Kind for ASTPrinter::Part * Improve comments around ASTPrinter. * toString -> toText on Val derived types. toText appends to a StringBuilder. * Added toSlice free function. Added operator<< for Val derived types. Use << where appropriate in doing toText. * More work at mark down output. * Fill in sourceloc for enum case. Add more sophisticated location determination for EnumCase. Refactored documentation output into DocMarkdownWriter. * Improvements for sig output. * Split up slang-doc into extractor and writer. * WIP generic support for doc support. * Some refactoring to make DocExtractor have potential to be used without Decls. * Made doc extraction work without Decls. * Output generic parameters. * Add generic parameter extraction. * Added writing variables. * Add an interface test. * Fix toArray. * Support for extensions, and inheritance. * Disable the doc test. * Added flags to compileStdLib. * More work around handling generics in markdown output. * More improvements around associated type handling. * List method names only once. Output in/out/inout/const * Fix namespace printing. * WIP summarizing doc output. * Small fixes and improvements for doc output. * Output all stdlib in single doc file. * Remove compile flags from addBuiltinSource. * Find only unique signatures. First pass at trying to get requirements. * First pass at requirements for stdlib docs. * Remove __ function/methods * Added Target Availability * Add markup access. Make sections of stdlib hidden. * MarkdownAccess -> Visibility Add isVisible methods Use ASTPrinter to print decl name. * Add current stdlib doc output. * Disable doc test for now. * Fix clang issue. * Don't use bullets and numbering , just use numbering. * Put methods in source order. * Fix bad-operator-call.slang test that fails because it now outputs out parameters as such. * Refactor MarkDownWriter to separate 'extraction' from output. * Fix typo around @ lines. * Fix issue with extracting 'before' when preceeded by complex attributes/modifiers. * Fix handling of generics with the same name. * Work around for having overloading with generics - we don't want to output generic params as part of name. * Remove generic paramters from name. * Simplify handling of outputting overridable names.
Diffstat (limited to 'source/slang/slang.cpp')
-rw-r--r--source/slang/slang.cpp39
1 files changed, 38 insertions, 1 deletions
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp
index 1820b24e5..de47c48ee 100644
--- a/source/slang/slang.cpp
+++ b/source/slang/slang.cpp
@@ -245,7 +245,7 @@ SlangResult Session::checkPassThroughSupport(SlangPassThrough inPassThrough)
return checkExternalCompilerSupport(this, PassThroughMode(inPassThrough));
}
-SlangResult Session::compileStdLib()
+SlangResult Session::compileStdLib(slang::CompileStdLibFlags compileFlags)
{
if (m_builtinLinkage->mapNameToLoadedModules.Count())
{
@@ -256,6 +256,43 @@ SlangResult Session::compileStdLib()
// TODO(JS): Could make this return a SlangResult as opposed to exception
addBuiltinSource(coreLanguageScope, "core", getCoreLibraryCode());
addBuiltinSource(hlslLanguageScope, "hlsl", getHLSLLibraryCode());
+
+ if (compileFlags & slang::CompileStdLibFlag::WriteDocumentation)
+ {
+ // Not 100% clear where best to get the ASTBuilder from, but from the linkage shouldn't
+ // cause any problems with scoping
+
+ ASTBuilder* astBuilder = getBuiltinLinkage()->getASTBuilder();
+ SourceManager* sourceManager = getBuiltinSourceManager();
+
+ DiagnosticSink sink(sourceManager, Lexer::sourceLocationLexer);
+
+ List<String> docStrings;
+
+ // For all the modules add their doc output to docStrings
+ for (Module* stdlibModule : stdlibModules)
+ {
+ RefPtr<DocMarkup> markup(new DocMarkup);
+ DocMarkupExtractor::extract(stdlibModule->getModuleDecl(), sourceManager, &sink, markup);
+
+ DocMarkDownWriter writer(markup, astBuilder);
+ writer.writeAll();
+ docStrings.add(writer.getOutput());
+ }
+
+ // Combine all together in stdlib-doc.md output fiel
+ {
+ String fileName("stdlib-doc.md");
+
+ StreamWriter writer(new FileStream(fileName, FileMode::Create));
+
+ for (auto& docString : docStrings)
+ {
+ writer.Write(docString);
+ }
+ }
+ }
+
return SLANG_OK;
}