Skip to content

Commit 0913436

Browse files
committed
chore: Add views::members
Signed-off-by: Roberto Raggi <[email protected]>
1 parent a506304 commit 0913436

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

src/lsp/cxx/lsp/cxx_document.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,7 @@ void CxxDocument::parse(std::string source) {
259259

260260
if (auto classType = type_cast<ClassType>(objectType)) {
261261
auto classSymbol = classType->symbol();
262-
for (auto member : classSymbol->scope()->symbols()) {
263-
if (!member->name()) continue;
262+
for (auto member : views::members(classSymbol)) {
264263
auto item = d->completionItems.emplace_back();
265264
item.label(to_string(member->name()));
266265
}

src/parser/cxx/scope.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,18 @@ constexpr auto functions = std::views::filter(&Symbol::isFunction) |
106106
constexpr auto variables = std::views::filter(&Symbol::isVariable) |
107107
std::views::transform(symbol_cast<VariableSymbol>);
108108

109+
inline auto members(Scope* scope) { return std::views::all(scope->symbols()); }
110+
111+
inline auto members(ScopedSymbol* symbol) {
112+
return std::views::all(symbol->scope()->symbols());
113+
}
114+
115+
inline auto find(Scope* scope, const Name* name) {
116+
return scope ? scope->find(name) : SymbolChainView{nullptr};
117+
}
118+
119+
constexpr auto named_symbol = std::views::filter(&Symbol::name);
120+
109121
} // namespace views
110122

111123
} // namespace cxx

src/parser/cxx/symbol_instantiation.cc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ auto SymbolInstantiation::VisitSymbol::operator()(ClassSymbol* symbol)
229229
auto newCtor = self.instantiate(ctor);
230230
newSymbol->addConstructor(newCtor);
231231
}
232-
for (auto member : symbol->scope()->symbols()) {
232+
for (auto member : views::members(symbol)) {
233233
auto newMember = self.instantiate(member);
234234
newSymbol->addMember(newMember);
235235
}
@@ -239,7 +239,7 @@ auto SymbolInstantiation::VisitSymbol::operator()(ClassSymbol* symbol)
239239
auto SymbolInstantiation::VisitSymbol::operator()(EnumSymbol* symbol)
240240
-> Symbol* {
241241
auto newSymbol = self.replacement(symbol);
242-
for (auto member : symbol->scope()->symbols()) {
242+
for (auto member : views::members(symbol)) {
243243
auto newMember = self.instantiate(member);
244244
newSymbol->addMember(newMember);
245245
}
@@ -249,7 +249,7 @@ auto SymbolInstantiation::VisitSymbol::operator()(EnumSymbol* symbol)
249249
auto SymbolInstantiation::VisitSymbol::operator()(ScopedEnumSymbol* symbol)
250250
-> Symbol* {
251251
auto newSymbol = self.replacement(symbol);
252-
for (auto member : symbol->scope()->symbols()) {
252+
for (auto member : views::members(symbol)) {
253253
auto newMember = self.instantiate(member);
254254
newSymbol->addMember(newMember);
255255
}
@@ -259,7 +259,7 @@ auto SymbolInstantiation::VisitSymbol::operator()(ScopedEnumSymbol* symbol)
259259
auto SymbolInstantiation::VisitSymbol::operator()(FunctionSymbol* symbol)
260260
-> Symbol* {
261261
auto newSymbol = self.replacement(symbol);
262-
for (auto member : symbol->scope()->symbols()) {
262+
for (auto member : views::members(symbol)) {
263263
if (member->isBlock()) continue;
264264
auto newMember = self.instantiate(member);
265265
newSymbol->addMember(newMember);
@@ -300,7 +300,7 @@ auto SymbolInstantiation::VisitSymbol::operator()(EnumeratorSymbol* symbol)
300300
auto SymbolInstantiation::VisitSymbol::operator()(
301301
FunctionParametersSymbol* symbol) -> Symbol* {
302302
auto newSymbol = self.replacement(symbol);
303-
for (auto member : symbol->scope()->symbols()) {
303+
for (auto member : views::members(symbol)) {
304304
if (member->isBlock()) continue;
305305
auto newMember = self.instantiate(member);
306306
newSymbol->addMember(newMember);
@@ -311,7 +311,7 @@ auto SymbolInstantiation::VisitSymbol::operator()(
311311
auto SymbolInstantiation::VisitSymbol::operator()(
312312
TemplateParametersSymbol* symbol) -> Symbol* {
313313
auto newSymbol = self.replacement(symbol);
314-
for (auto member : symbol->scope()->symbols()) {
314+
for (auto member : views::members(symbol)) {
315315
auto newMember = self.instantiate(member);
316316
newSymbol->addMember(newMember);
317317
}

0 commit comments

Comments
 (0)