diff --git a/share/mrdocs/addons/generator/adoc/partials/symbol.adoc.hbs b/share/mrdocs/addons/generator/adoc/partials/symbol.adoc.hbs index d38cb499fd..420edff494 100644 --- a/share/mrdocs/addons/generator/adoc/partials/symbol.adoc.hbs +++ b/share/mrdocs/addons/generator/adoc/partials/symbol.adoc.hbs @@ -59,7 +59,7 @@ {{else}} |`{{>symbol/name . nolink=true}}` {{/if}} -|{{~doc.brief}} +|{{{~doc.brief}}} {{/each}} |=== diff --git a/share/mrdocs/addons/generator/common/partials/symbol/signature/enum.hbs b/share/mrdocs/addons/generator/common/partials/symbol/signature/enum.hbs index c8b31f32ce..202010d355 100644 --- a/share/mrdocs/addons/generator/common/partials/symbol/signature/enum.hbs +++ b/share/mrdocs/addons/generator/common/partials/symbol/signature/enum.hbs @@ -1,2 +1,2 @@ -enum {{>symbol/name .~}} +enum {{#if isScoped}}class {{/if}}{{>symbol/name .~}} {{#if type}} : {{>type/declarator type}}{{/if}}; \ No newline at end of file diff --git a/src/lib/AST/ASTVisitor.cpp b/src/lib/AST/ASTVisitor.cpp index ed19f09405..7c6a952bc9 100644 --- a/src/lib/AST/ASTVisitor.cpp +++ b/src/lib/AST/ASTVisitor.cpp @@ -1089,6 +1089,10 @@ populate( default_arg) { param.Default = getSourceCode(default_arg->getSourceRange()); + if (param.Default.starts_with("= ")) + { + param.Default.erase(0, 2); + } } } diff --git a/src/lib/Lib/MrDocsCompilationDatabase.cpp b/src/lib/Lib/MrDocsCompilationDatabase.cpp index fe9eda7f9e..6e7161a45e 100644 --- a/src/lib/Lib/MrDocsCompilationDatabase.cpp +++ b/src/lib/Lib/MrDocsCompilationDatabase.cpp @@ -35,7 +35,16 @@ isCXXSrcFile( { StringRef ext = llvm::sys::path::extension(filename).drop_front(); driver::types::ID extensionId = driver::types::lookupTypeForExtension(ext); - return driver::types::isCXX(extensionId) || ext == "c"; + return driver::types::isCXX(extensionId); +} + +static +bool +isCSrcFile( + std::string_view filename) +{ + StringRef ext = llvm::sys::path::extension(filename).drop_front(); + return ext == "c"; } template @@ -247,7 +256,8 @@ adjustCommandLine( StringRef const workingDir, std::vector const& cmdline, std::shared_ptr const& config, - std::unordered_map> const& implicitIncludeDirectories) + std::unordered_map> const& implicitIncludeDirectories, + std::string_view filename) { if (cmdline.empty()) { @@ -359,12 +369,40 @@ adjustCommandLine( // ------------------------------------------------------ // Language standard // ------------------------------------------------------ + // If cmdline contains `-x c` or `-x c++`, then the + // language is explicitly set. + bool isExplicitCppCompileCommand = false; + bool isExplicitCCompileCommand = false; + constexpr auto is_x_option = [](std::string_view const opt) { + return opt == "-x" || opt == "--language"; + }; + if (auto const it = std::ranges::find_if(cmdline, is_x_option); + it != cmdline.end()) + { + if (auto const next = std::next(it); + next != cmdline.end()) + { + isExplicitCppCompileCommand = *next == "c++"; + isExplicitCCompileCommand = *next == "c"; + } + } + bool const isImplicitCSourceFile = isCSrcFile(filename); + bool const isCCompileCommand = + isExplicitCCompileCommand || (!isExplicitCppCompileCommand && isImplicitCSourceFile); + constexpr auto is_std_option = [](std::string_view const opt) { return opt.starts_with("-std=") || opt.starts_with("--std=") || opt.starts_with("/std:"); }; if (std::ranges::find_if(cmdline, is_std_option) == cmdline.end()) { - new_cmdline.emplace_back("-std=c++23"); + if (!isCCompileCommand) + { + new_cmdline.emplace_back("-std=c++23"); + } + else + { + new_cmdline.emplace_back("-std=c23"); + } } // ------------------------------------------------------ @@ -510,10 +548,11 @@ MrDocsCompilationDatabase( workingDir, cmd0.CommandLine, config, - implicitIncludeDirectories); + implicitIncludeDirectories, + cmd0.Filename); cmd.Directory = makeAbsoluteAndNative(workingDir, cmd0.Directory); cmd.Filename = makeAbsoluteAndNative(workingDir, cmd0.Filename); - if (isCXXSrcFile(cmd.Filename)) + if (isCXXSrcFile(cmd.Filename) || isCSrcFile(cmd.Filename)) { const bool emplaced = IndexByFile_.try_emplace(cmd.Filename, AllCommands_.size()).second; if (emplaced) diff --git a/test-files/golden-tests/metadata/enum.adoc b/test-files/golden-tests/metadata/enum.adoc index 9ab3214434..00a0ce1ded 100644 --- a/test-files/golden-tests/metadata/enum.adoc +++ b/test-files/golden-tests/metadata/enum.adoc @@ -54,11 +54,11 @@ enum E0; |=== |Name |Description |`e0` -|e0 brief&period; +|e0 brief. |`e1` -|e1 brief&period; +|e1 brief. |=== @@ -111,7 +111,7 @@ Declared in `<enum.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- -enum E2 : int; +enum class E2 : int; ---- === Members @@ -121,11 +121,11 @@ enum E2 : int; |=== |Name |Description |`e4` -|e4 brief&period; +|e4 brief. |`e5` -|e5 brief&period; +|e5 brief. |=== @@ -148,7 +148,7 @@ Declared in `<enum.cpp>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- -enum E3 : char; +enum class E3 : char; ---- === Members diff --git a/test-files/golden-tests/metadata/enum.html b/test-files/golden-tests/metadata/enum.html index ac3ce2dcc7..664c4bc92c 100644 --- a/test-files/golden-tests/metadata/enum.html +++ b/test-files/golden-tests/metadata/enum.html @@ -131,7 +131,7 @@

Synopsis

Declared in <enum.cpp>
 
-enum E2 : int;
+enum class E2 : int;
 
 
@@ -175,7 +175,7 @@

Synopsis

Declared in <enum.cpp>
 
-enum E3 : char;
+enum class E3 : char;