Add full_name() function
This commit is contained in:
parent
a2c54165bd
commit
0b88656cc2
5 changed files with 51 additions and 0 deletions
|
|
@ -35,6 +35,13 @@ namespace cppast
|
||||||
return name_;
|
return name_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// \returns The name of the new scope created by the entity,
|
||||||
|
/// if there is any.
|
||||||
|
type_safe::optional<std::string> scope_name() const
|
||||||
|
{
|
||||||
|
return do_get_scope_name();
|
||||||
|
}
|
||||||
|
|
||||||
/// \returns A [ts::optional_ref]() to the parent entity in the AST.
|
/// \returns A [ts::optional_ref]() to the parent entity in the AST.
|
||||||
type_safe::optional_ref<const cpp_entity> parent() const noexcept
|
type_safe::optional_ref<const cpp_entity> parent() const noexcept
|
||||||
{
|
{
|
||||||
|
|
@ -51,6 +58,13 @@ namespace cppast
|
||||||
/// \returns The type of the entity.
|
/// \returns The type of the entity.
|
||||||
virtual cpp_entity_type do_get_entity_type() const noexcept = 0;
|
virtual cpp_entity_type do_get_entity_type() const noexcept = 0;
|
||||||
|
|
||||||
|
/// \returns The name of the new scope created by the entity, if any.
|
||||||
|
/// By default, there is no scope created.
|
||||||
|
virtual type_safe::optional<std::string> do_get_scope_name() const
|
||||||
|
{
|
||||||
|
return type_safe::nullopt;
|
||||||
|
}
|
||||||
|
|
||||||
void on_insert(const cpp_entity& parent) noexcept
|
void on_insert(const cpp_entity& parent) noexcept
|
||||||
{
|
{
|
||||||
parent_ = parent;
|
parent_ = parent;
|
||||||
|
|
@ -63,6 +77,9 @@ namespace cppast
|
||||||
friend struct detail::intrusive_list_access;
|
friend struct detail::intrusive_list_access;
|
||||||
friend detail::intrusive_list_node<cpp_entity>;
|
friend detail::intrusive_list_node<cpp_entity>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// \returns The full name of the [cppast::cpp_entity](), with all scopes.
|
||||||
|
std::string full_name(const cpp_entity& e);
|
||||||
} // namespace cppast
|
} // namespace cppast
|
||||||
|
|
||||||
#endif // CPPAST_CPP_ENTITY_HPP_INCLUDED
|
#endif // CPPAST_CPP_ENTITY_HPP_INCLUDED
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,10 @@ namespace cppast
|
||||||
|
|
||||||
cpp_entity_type do_get_entity_type() const noexcept override;
|
cpp_entity_type do_get_entity_type() const noexcept override;
|
||||||
|
|
||||||
|
/// \returns If the enum is scoped, the name of the enum,
|
||||||
|
/// otherwise [ts::nullopt]().
|
||||||
|
type_safe::optional<std::string> do_get_scope_name() const override;
|
||||||
|
|
||||||
std::unique_ptr<cpp_type> type_;
|
std::unique_ptr<cpp_type> type_;
|
||||||
bool scoped_;
|
bool scoped_;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,12 @@ namespace cppast
|
||||||
|
|
||||||
cpp_entity_type do_get_entity_type() const noexcept override;
|
cpp_entity_type do_get_entity_type() const noexcept override;
|
||||||
|
|
||||||
|
/// \returns The name of the namespace.
|
||||||
|
type_safe::optional<std::string> do_get_scope_name() const override
|
||||||
|
{
|
||||||
|
return name();
|
||||||
|
}
|
||||||
|
|
||||||
bool inline_;
|
bool inline_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
19
src/cpp_entity.cpp
Normal file
19
src/cpp_entity.cpp
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
// Copyright (C) 2017 Jonathan Müller <jonathanmueller.dev@gmail.com>
|
||||||
|
// This file is subject to the license terms in the LICENSE file
|
||||||
|
// found in the top-level directory of this distribution.
|
||||||
|
|
||||||
|
#include <cppast/cpp_entity.hpp>
|
||||||
|
|
||||||
|
using namespace cppast;
|
||||||
|
|
||||||
|
std::string cppast::full_name(const cpp_entity& e)
|
||||||
|
{
|
||||||
|
std::string scopes;
|
||||||
|
|
||||||
|
for (auto cur = e.parent(); cur; cur = cur.value().parent())
|
||||||
|
// prepend each scope, if there is any
|
||||||
|
type_safe::with(cur.value().scope_name(),
|
||||||
|
[&](const std::string& cur_scope) { scopes = cur_scope + "::" + scopes; });
|
||||||
|
|
||||||
|
return scopes + e.name();
|
||||||
|
}
|
||||||
|
|
@ -17,3 +17,8 @@ cpp_entity_type cpp_enum::do_get_entity_type() const noexcept
|
||||||
{
|
{
|
||||||
return cpp_entity_type::enum_t;
|
return cpp_entity_type::enum_t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type_safe::optional<std::string> cpp_enum::do_get_scope_name() const
|
||||||
|
{
|
||||||
|
return scoped_ ? type_safe::make_optional(name()) : type_safe::nullopt;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue