MCPcopy Create free account
hub / github.com/CppCXY/EmmyLuaCodeStyle / DfsForeach

Method DfsForeach

CodeFormatCore/src/Format/FormatState.cpp:143–218  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

141}
142
143void FormatState::DfsForeach(std::vector<LuaSyntaxNode> &startNodes,
144 const LuaSyntaxTree &t,
145 const FormatState::FormatHandle &enterHandle) {
146 _foreachContinue = true;
147 std::vector<Traverse> traverseStack;
148 for (auto it = startNodes.rbegin(); it != startNodes.rend(); it++) {
149 traverseStack.emplace_back(*it, TraverseEvent::Enter);
150 }
151
152 // 非递归深度优先遍历
153 FormatResolve resolve;
154 while (!traverseStack.empty()) {
155 Traverse traverse = traverseStack.back();
156 resolve.Reset();
157 if (traverse.Event == TraverseEvent::Enter) {
158 traverseStack.back().Event = TraverseEvent::Exit;
159 if (_ignoreRange.EndIndex != 0) {
160 auto index = traverse.Node.GetIndex();
161 if (index >= _ignoreRange.StartIndex && index <= _ignoreRange.EndIndex) {
162 continue;
163 }
164 }
165 for (auto &analyzer: _analyzers) {
166 analyzer->Query(*this, traverse.Node, t, resolve);
167 }
168 auto children = traverse.Node.GetChildren(t);
169 // 不采用 <range>
170 for (auto rIt = children.rbegin(); rIt != children.rend(); rIt++) {
171 traverseStack.emplace_back(*rIt, TraverseEvent::Enter);
172 }
173
174 if (resolve.GetIndentStrategy() != IndentStrategy::None) {
175 auto indent = resolve.GetIndent();
176 if (indent == 0 && resolve.GetIndentStrategy() != IndentStrategy::Absolute) {
177 if (_formatStyle.indent_style == IndentStyle::Space) {
178 indent = _formatStyle.indent_size;
179 } else {
180 indent = _formatStyle.tab_width;
181 }
182 }
183
184 switch (resolve.GetIndentStrategy()) {
185 case IndentStrategy::Relative: {
186 AddRelativeIndent(traverse.Node, indent);
187 break;
188 }
189 case IndentStrategy::InvertRelative: {
190 AddInvertIndent(traverse.Node, indent);
191 break;
192 }
193 case IndentStrategy::Absolute: {
194 AddAbsoluteIndent(traverse.Node, indent);
195 break;
196 }
197 case IndentStrategy::Same: {
198 AddSameIndent(traverse.Node);
199 break;
200 }

Callers 3

BasicStyleCheckMethod · 0.80
GetFormatResultMethod · 0.80
GetFormatResultMethod · 0.80

Calls 8

GetIndexMethod · 0.80
GetChildrenMethod · 0.80
GetIndentStrategyMethod · 0.80
GetIndentMethod · 0.80
emptyMethod · 0.45
ResetMethod · 0.45
QueryMethod · 0.45
pop_backMethod · 0.45

Tested by

no test coverage detected