diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/AssembleMojoTest.java b/eo-maven-plugin/src/test/java/org/eolang/maven/AssembleMojoTest.java
index 68d0c51531..8f8c6c153c 100644
--- a/eo-maven-plugin/src/test/java/org/eolang/maven/AssembleMojoTest.java
+++ b/eo-maven-plugin/src/test/java/org/eolang/maven/AssembleMojoTest.java
@@ -98,6 +98,7 @@ void assemblesNotFailWithFailOnErrorFlag(@TempDir final Path temp) throws Except
"+alias stdout org.eolang.io.stdout",
"+home https://github.com/objectionary/eo",
"+package test",
+ "+version 0.0.0",
"",
"[x] < wrong>\n (stdout \"Hello!\" x).print\n"
),
@@ -109,6 +110,7 @@ void assemblesNotFailWithFailOnErrorFlag(@TempDir final Path temp) throws Except
"+alias stdout org.eolang.io.stdout",
"+home https://github.com/objectionary/eo",
"+package test",
+ "+version 0.0.0",
"",
"[x] > main\n (stdout \"Hello!\" x).print\n"
),
diff --git a/eo-parser/src/main/java/org/eolang/parser/ParsingTrain.java b/eo-parser/src/main/java/org/eolang/parser/ParsingTrain.java
index 30c59945ec..6d89524225 100644
--- a/eo-parser/src/main/java/org/eolang/parser/ParsingTrain.java
+++ b/eo-parser/src/main/java/org/eolang/parser/ParsingTrain.java
@@ -53,11 +53,6 @@ public final class ParsingTrain extends TrEnvelope {
/**
* Sheets in the right order.
- *
- * @todo #1542:90m Add xsl transformation
- * that checks the presence of +version meta.
- * The version meta have to be correct.
- * It can be divided by 2 xsl checks.
*/
private static final String[] SHEETS = {
"/org/eolang/parser/errors/not-empty-atoms.xsl",
@@ -78,6 +73,7 @@ public final class ParsingTrain extends TrEnvelope {
"/org/eolang/parser/warnings/unsorted-metas.xsl",
"/org/eolang/parser/warnings/incorrect-architect.xsl",
"/org/eolang/parser/warnings/incorrect-home.xsl",
+ "/org/eolang/parser/warnings/incorrect-version.xsl",
"/org/eolang/parser/expand-aliases.xsl",
"/org/eolang/parser/resolve-aliases.xsl",
"/org/eolang/parser/synthetic-references.xsl",
@@ -89,6 +85,7 @@ public final class ParsingTrain extends TrEnvelope {
"/org/eolang/parser/warnings/duplicate-metas.xsl",
"/org/eolang/parser/warnings/mandatory-package-meta.xsl",
"/org/eolang/parser/warnings/mandatory-home-meta.xsl",
+ "/org/eolang/parser/warnings/mandatory-version-meta.xsl",
"/org/eolang/parser/warnings/correct-package-meta.xsl",
"/org/eolang/parser/errors/unused-aliases.xsl",
"/org/eolang/parser/errors/data-objects.xsl",
diff --git a/eo-parser/src/main/resources/org/eolang/parser/warnings/incorrect-version.xsl b/eo-parser/src/main/resources/org/eolang/parser/warnings/incorrect-version.xsl
new file mode 100644
index 0000000000..2eb37432c4
--- /dev/null
+++ b/eo-parser/src/main/resources/org/eolang/parser/warnings/incorrect-version.xsl
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ incorrect-version
+
+
+
+
+
+ warning
+
+ Wrong format of semver"
+
+ "
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eo-parser/src/main/resources/org/eolang/parser/warnings/mandatory-version-meta.xsl b/eo-parser/src/main/resources/org/eolang/parser/warnings/mandatory-version-meta.xsl
new file mode 100644
index 0000000000..2002d4e1d4
--- /dev/null
+++ b/eo-parser/src/main/resources/org/eolang/parser/warnings/mandatory-version-meta.xsl
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+ missing-version-meta
+
+
+
+
+
+ warning
+
+ Missing version meta
+
+
+
+
+
+ more-one-version-meta
+
+
+
+
+
+ warning
+
+ More than one version specified
+
+
+
+
+
+
+
+
+
+
diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/add-locators.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/add-locators.yaml
index eb6e06d051..6356bd686f 100644
--- a/eo-parser/src/test/resources/org/eolang/parser/packs/add-locators.yaml
+++ b/eo-parser/src/test/resources/org/eolang/parser/packs/add-locators.yaml
@@ -22,6 +22,7 @@ eo: |
+alias x
+package org.abc
+home www.abc.com
+ +version 0.0.0
[] > a
b > @
diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/add-probes.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/add-probes.yaml
index 2ac893fb20..9aec91c28a 100644
--- a/eo-parser/src/test/resources/org/eolang/parser/packs/add-probes.yaml
+++ b/eo-parser/src/test/resources/org/eolang/parser/packs/add-probes.yaml
@@ -11,6 +11,7 @@ tests:
eo: |
+home https://github.com/objectionary/eo
+package org.eolang.custom
+ +version 0.0.0
[] > app
QQ.txt.sprintf > @
diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/catches/catches-incorrect-version.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/catches/catches-incorrect-version.yaml
new file mode 100644
index 0000000000..64b63df225
--- /dev/null
+++ b/eo-parser/src/test/resources/org/eolang/parser/packs/catches/catches-incorrect-version.yaml
@@ -0,0 +1,16 @@
+xsls:
+ - /org/eolang/parser/warnings/incorrect-version.xsl
+tests:
+ - /program/errors[count(error[@severity='warning'])=2]
+ - /program/errors/error[@line='3']
+ - /program/errors/error[@line='5']
+
+eo: |
+ +version 0.0.0
+ +version 0.2.1
+ +version alpha
+ +alias org.eolang.io.stdout
+ +version 1.0.0-alpha.beta
+
+ [x] > foo
+ x.div in.nextInt > @
diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/catches/catches-mandatory-version-meta.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/catches/catches-mandatory-version-meta.yaml
new file mode 100644
index 0000000000..e91ee975cc
--- /dev/null
+++ b/eo-parser/src/test/resources/org/eolang/parser/packs/catches/catches-mandatory-version-meta.yaml
@@ -0,0 +1,12 @@
+xsls:
+ - /org/eolang/parser/warnings/mandatory-version-meta.xsl
+tests:
+ - /program/errors[count(error[@severity='warning'])=1]
+ - /program/errors[count(error[@severity='error'])=0]
+eo: |
+ +home https://github.com/objectionary/eo
+ +package test
+ +alias stding org.eolang.io.stdin
+
+ [] > main
+ (stdout "Hello, world!").print > @
diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/catches/catches-not-one-version-meta.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/catches/catches-not-one-version-meta.yaml
new file mode 100644
index 0000000000..96b719f54d
--- /dev/null
+++ b/eo-parser/src/test/resources/org/eolang/parser/packs/catches/catches-not-one-version-meta.yaml
@@ -0,0 +1,15 @@
+xsls:
+ - /org/eolang/parser/warnings/mandatory-version-meta.xsl
+tests:
+ - /program/errors[count(error[@severity='warning'])=1]
+ - /program/errors[count(error[@severity='error'])=0]
+eo: |
+ +alias stding org.eolang.io.stdin
+ +alias stdout org.eolang.io.stdout
+ +home https://github.com/objectionary/eo
+ +package sandbox
+ +version 0.0.0
+ +version 0.0.0
+
+ [] > main
+ (stdout "Hello, world!").print
diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/empty-vs-free.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/empty-vs-free.yaml
index 6638aa9716..cc4502e9ed 100644
--- a/eo-parser/src/test/resources/org/eolang/parser/packs/empty-vs-free.yaml
+++ b/eo-parser/src/test/resources/org/eolang/parser/packs/empty-vs-free.yaml
@@ -6,5 +6,7 @@ tests:
eo: |
+home https://github.com/objectionary/eo
+package test
+ +version 0.0.0
+
[x] > foo
[] > y
diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/leap-year.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/leap-year.yaml
index 0f0f1ce120..b89ee0b5d2 100644
--- a/eo-parser/src/test/resources/org/eolang/parser/packs/leap-year.yaml
+++ b/eo-parser/src/test/resources/org/eolang/parser/packs/leap-year.yaml
@@ -13,6 +13,7 @@ eo: |
+alias org.eolang.txt.scanner
+home https://github.com/objectionary/eo
+package test
+ +version 0.0.0
[args] > main
[y] > leap
diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/priority/additional-brackets.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/priority/additional-brackets.yaml
index aa2889fa69..dd57edcbdc 100644
--- a/eo-parser/src/test/resources/org/eolang/parser/packs/priority/additional-brackets.yaml
+++ b/eo-parser/src/test/resources/org/eolang/parser/packs/priority/additional-brackets.yaml
@@ -4,6 +4,7 @@ tests:
eo: |
+home https://github.com/objectionary/eo
+package org.eolang.priority
+ +version 0.0.0
[] > x
1.times 2 (1.plus other.value)
\ No newline at end of file
diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/priority/space-between.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/priority/space-between.yaml
index 6d0b54b9b1..ecf40f249f 100644
--- a/eo-parser/src/test/resources/org/eolang/parser/packs/priority/space-between.yaml
+++ b/eo-parser/src/test/resources/org/eolang/parser/packs/priority/space-between.yaml
@@ -5,6 +5,7 @@ tests:
eo: |
+home https://github.com/objectionary/eo
+package org.eolang.priority
+ +version 0.0.0
[] > sum
^.a.plus ^.b > @
diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/recursion.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/recursion.yaml
index eb32c30ee0..9c2e1a714d 100644
--- a/eo-parser/src/test/resources/org/eolang/parser/packs/recursion.yaml
+++ b/eo-parser/src/test/resources/org/eolang/parser/packs/recursion.yaml
@@ -1,10 +1,11 @@
tests:
- /program/errors[count(*)=0]
- - //o[@name='f' and @line='4']
- - //o[@base='f' and @ref='4']
+ - //o[@name='f' and @line='5']
+ - //o[@base='f' and @ref='5']
eo: |
+home https://github.com/objectionary/eo
+package test
+ +version 0.0.0
[args...] > main
[n] > f
f 5 > @
diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/redundency/redundent-parentheses.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/redundency/redundent-parentheses.yaml
index 1cc9925833..e86d029762 100644
--- a/eo-parser/src/test/resources/org/eolang/parser/packs/redundency/redundent-parentheses.yaml
+++ b/eo-parser/src/test/resources/org/eolang/parser/packs/redundency/redundent-parentheses.yaml
@@ -1,9 +1,10 @@
tests:
- /program/errors[count(error)=1]
- - //error[@severity='warning' and @line=5 and text()="'(1.plus 2)' contains redundant parentheses"]
+ - //error[@severity='warning' and @line=6 and text()="'(1.plus 2)' contains redundant parentheses"]
eo: |
+home https://github.com/objectionary/eo
+package a.b.c
+ +version 0.0.0
[] > x
(1.plus 2) > y
\ No newline at end of file