// Changes: A Microlang for Change Logs.

versionParser
 cue 📦
 atoms cueAtom semanticVersionAtom dateAtom
 description What is the semantic version number?
 extends h1Parser
 // Todo: mixins in Parsers would make this easier.
 boolean isMeasure true
 boolean isMeasureRequired true
 boolean isConceptDelimiter true
 float sortIndex 1
 javascript
  get measureValue() {
    return this.getAtom(1)
  }
  measureName = "version"

bugFixParser
 cue 🏥
 extends abstractCustomListItemParser
newFeatureParser
 cue 🎉
 extends abstractCustomListItemParser
breakingChangeParser
 cue ⚠️
 extends abstractCustomListItemParser
styleTweakParser
 cue 🎨
 extends abstractCustomListItemParser

releaseDateParser
 extends abstractMeasureParser
 boolean isMeasureRequired true
 boolean isComputed true
 float sortIndex 1.1
 javascript
  computeValue(concept) {
    return concept.particleAt(0).getAtom(2)
  }

abstractSummaryParser
 extends abstractMeasureParser
 boolean isComputed true
 float sortIndex 1.2

bugFixesParser
 extends abstractSummaryParser
 description How many bug fixes in this release?
 javascript
  computeValue(concept) {
    return concept.findParticles("🏥").length
  }

newFeaturesParser
 extends abstractSummaryParser
 description How many new features in this release?
 javascript
  computeValue(concept) {
    return concept.findParticles("🎉").length
  }

breakingChangesParser
 extends abstractSummaryParser
 description How many breaking changes in this release?
 javascript
  computeValue(concept) {
    return concept.findParticles("⚠️").length
  }
