Skip to content

Commit

Permalink
Emit the correct Alias on the key (#908) (#929)
Browse files Browse the repository at this point in the history
  • Loading branch information
dota17 authored Jul 27, 2020
1 parent 1c9abc8 commit 98acc5a
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/emitter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,9 @@ void Emitter::FlowMapPrepareSimpleKeyValue(EmitterNodeType::value child) {
if (m_stream.comment())
m_stream << "\n";
m_stream << IndentTo(lastIndent);
if (m_pState->HasAlias()) {
m_stream << " ";
}
m_stream << ":";
}

Expand Down Expand Up @@ -643,6 +646,9 @@ void Emitter::BlockMapPrepareSimpleKeyValue(EmitterNodeType::value child) {
const std::size_t nextIndent = curIndent + m_pState->CurGroupIndent();

if (!m_pState->HasBegunNode()) {
if (m_pState->HasAlias()) {
m_stream << " ";
}
m_stream << ":";
}

Expand Down Expand Up @@ -864,6 +870,8 @@ Emitter& Emitter::Write(const _Alias& alias) {

StartedScalar();

m_pState->SetAlias();

return *this;
}

Expand Down
4 changes: 4 additions & 0 deletions src/emitterstate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ EmitterState::EmitterState()
m_groups{},
m_curIndent(0),
m_hasAnchor(false),
m_hasAlias(false),
m_hasTag(false),
m_hasNonContent(false),
m_docCount(0) {}
Expand All @@ -53,6 +54,8 @@ void EmitterState::SetLocalValue(EMITTER_MANIP value) {

void EmitterState::SetAnchor() { m_hasAnchor = true; }

void EmitterState::SetAlias() { m_hasAlias = true; }

void EmitterState::SetTag() { m_hasTag = true; }

void EmitterState::SetNonContent() { m_hasNonContent = true; }
Expand Down Expand Up @@ -87,6 +90,7 @@ void EmitterState::StartedNode() {
}

m_hasAnchor = false;
m_hasAlias = false;
m_hasTag = false;
m_hasNonContent = false;
}
Expand Down
3 changes: 3 additions & 0 deletions src/emitterstate.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ class EmitterState {

// node handling
void SetAnchor();
void SetAlias();
void SetTag();
void SetNonContent();
void SetLongKey();
Expand All @@ -65,6 +66,7 @@ class EmitterState {
std::size_t LastIndent() const;
std::size_t CurIndent() const { return m_curIndent; }
bool HasAnchor() const { return m_hasAnchor; }
bool HasAlias() const { return m_hasAlias; }
bool HasTag() const { return m_hasTag; }
bool HasBegunNode() const {
return m_hasAnchor || m_hasTag || m_hasNonContent;
Expand Down Expand Up @@ -187,6 +189,7 @@ class EmitterState {
std::vector<std::unique_ptr<Group>> m_groups;
std::size_t m_curIndent;
bool m_hasAnchor;
bool m_hasAlias;
bool m_hasTag;
bool m_hasNonContent;
std::size_t m_docCount;
Expand Down
15 changes: 15 additions & 0 deletions test/integration/emitter_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,21 @@ TEST_F(EmitterTest, AliasAndAnchor) {
ExpectEmit("- &fred\n name: Fred\n age: 42\n- *fred");
}

TEST_F(EmitterTest, AliasOnKey) {
out << BeginSeq;
out << Anchor("name") << "Name";
out << BeginMap;
out << Key << Alias("name") << Value << "Fred";
out << EndMap;
out << Flow << BeginMap;
out << Key << Alias("name") << Value << "Mike";
out << EndMap;
out << EndSeq;
ExpectEmit(R"(- &name Name
- *name : Fred
- {*name : Mike})");
}

TEST_F(EmitterTest, AliasAndAnchorWithNull) {
out << BeginSeq;
out << Anchor("fred") << Null;
Expand Down

0 comments on commit 98acc5a

Please sign in to comment.