diff --git a/rules/req-submit-button/README.md b/rules/req-submit-button/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/rules/req-submit-button/fixture/success.html b/rules/req-submit-button/fixture/success.html
new file mode 100644
index 0000000..dac16f7
--- /dev/null
+++ b/rules/req-submit-button/fixture/success.html
@@ -0,0 +1,50 @@
+
+
+
+
+
+ HTML Academy: Девайс
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/rules/req-submit-button/index.js b/rules/req-submit-button/index.js
new file mode 100644
index 0000000..533da65
--- /dev/null
+++ b/rules/req-submit-button/index.js
@@ -0,0 +1,34 @@
+'use strict';
+const { is_tag_node, attribute_has_value } = require('@linthtml/dom-utils');
+
+const formSubmitter = ['button', 'input'];
+
+const findSubmitters = (node) => {
+ let submitters = [];
+ if (is_tag_node(node) && formSubmitter.includes(node.name) && attribute_has_value(node, 'type', 'submit')) {
+ submitters.push(node);
+ }
+ if (node.children) {
+ for (const child of node.children) {
+ submitters = submitters.concat(findSubmitters(child));
+ }
+ }
+ return submitters;
+};
+
+module.exports = {
+ name: 'htmlacademy/req-submit-button',
+ // eslint-disable-next-line camelcase
+ lint(node, rule_config, {report}) {
+ if (is_tag_node(node) && node.name === 'form') {
+ const submitters = findSubmitters(node);
+
+ if(submitters.length === 0) {
+ report({
+ position: node.loc,
+ message: 'Submitter inside form must have type="submit".',
+ });
+ }
+ }
+ }
+};