Skip to content
This repository has been archived by the owner on Nov 8, 2024. It is now read-only.

Commit

Permalink
Merge pull request #386 from apiaryio/klokane/warn-drafter-246
Browse files Browse the repository at this point in the history
Add warning for named object as array member
  • Loading branch information
pksunkara committed May 18, 2016
2 parents ec6fbcd + 9c83911 commit cc1b042
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/MSONValueMemberParser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,19 @@ namespace snowcrash {

element.build(valueMember.node);

if ((valueMember.node.valueDefinition.typeDefinition.baseType == mson::ImplicitObjectBaseType ||
valueMember.node.valueDefinition.typeDefinition.baseType == mson::ObjectBaseType) &&
!valueMember.node.valueDefinition.values.empty()) {
// WARN: object definition contain value
// e.g
// - a (array)
// - key (object)
mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceCharacterIndex);
sections.report.warnings.push_back(Warning("array member definition of type 'object' contains value. You should use type definition without value eg. '- (object)'",
LogicalErrorWarning,
sourceMap));
}

if (pd.exportSourceMap()) {
elementSM.value = valueMember.sourceMap;
}
Expand Down
16 changes: 16 additions & 0 deletions test/test-MSONValueMemberParser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -217,3 +217,19 @@ TEST_CASE("Parse mson value member array with items", "[mson][value_member]")
valueMemberSM = valueMember.sourceMap.sections.collection[0].elements().collection[1].value;
SourceMapHelper::check(valueMemberSM.valueDefinition.sourceMap, 50, 17);
}

TEST_CASE("Check warnings for object in array with defined value", "[mson][value_member]")
{
mdp::ByteBuffer source = \
"- (array)\n"\
" - explicit (object)\n"\
" - implicit\n"\
" - k: v\n";

ParseResult<mson::ValueMember> valueMember;
SectionParserHelper<mson::ValueMember, MSONValueMemberParser>::parse(source, MSONValueMemberSectionType, valueMember, ExportSourcemapOption);

REQUIRE(valueMember.report.error.code == Error::OK);
REQUIRE(valueMember.report.warnings.size() == 2);

}

0 comments on commit cc1b042

Please sign in to comment.