Repository: JoshuaKGoldberg/eslint-plugin-package-json (ts)

Issue:
🚀 Feature: Bring in a require-description rule
### Bug Report Checklist

- [x] I have tried restarting my IDE and the issue persists.
- [x] I have pulled the latest `main` branch of the repository.
- [x] I have [searched for related issues](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=is%3Aissue) and found none that matched my issue.

### Overview

Following #42 -> #51: we've resolved to create a standalone `require-description` rule. It should enforce that the field exists in the `package.json` file.


### Additional Info

💖 

Pull request description:
feat: add require-description rule
## PR Checklist

- [x] Addresses an existing open issue: fixes #864
- [x] That issue was marked as [`status: accepting prs`](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues?q=is%3Aopen+is%3Aissue+label%3A%22status%3A+accepting+prs%22)
- [x] Steps in [CONTRIBUTING.md](https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/main/.github/CONTRIBUTING.md) were taken

## Overview

Added `require-description` rule.

Patch:
diff --git a/README.md b/README.md
index 2799bc4..2e3b8be 100644
--- a/README.md
+++ b/README.md
@@ -126,6 +126,7 @@ The default settings don't conflict, and Prettier plugins can quickly fix up ord
 | [order-properties](docs/rules/order-properties.md)                     | Package properties must be declared in standard order                                             | ✔️ ✅ | 🔧 |    |    |
 | [repository-shorthand](docs/rules/repository-shorthand.md)             | Enforce either object or shorthand declaration for repository.                                    | ✔️ ✅ | 🔧 |    |    |
 | [require-author](docs/rules/require-author.md)                         | Requires the `author` property to be present.                                                     |      |    |    |    |
+| [require-description](docs/rules/require-description.md)               | Requires the `description` property to be present.                                                | ✔️ ✅ |    |    |    |
 | [require-engines](docs/rules/require-engines.md)                       | Requires the `engines` property to be present.                                                    |      |    |    |    |
 | [require-files](docs/rules/require-files.md)                           | Requires the `files` property to be present.                                                      |      |    |    |    |
 | [require-keywords](docs/rules/require-keywords.md)                     | Requires the `keywords` property to be present.                                                   |      |    |    |    |
diff --git a/docs/rules/require-description.md b/docs/rules/require-description.md
new file mode 100644
index 0000000..4c29cd3
--- /dev/null
+++ b/docs/rules/require-description.md
@@ -0,0 +1,26 @@
+# require-description
+
+💼 This rule is enabled in the following configs: ✔️ `legacy-recommended`, ✅ `recommended`.
+
+<!-- end auto-generated rule header -->
+
+This rule checks for the existence of the `"description"` property in a package.json, and reports a violation if it doesn't exist.
+
+Example of **incorrect** code for this rule:
+
+```json
+{
+	"version": "13.0.0",
+	"author": "Jessica Moss"
+}
+```
+
+Example of **correct** code for this rule:
+
+```json
+{
+	"version": "13.0.0",
+	"author": "Jessica Moss",
+	"description": "Thee Silver Mt. Zion."
+}
+```
diff --git a/src/rules/require-properties.ts b/src/rules/require-properties.ts
index e0e0dd5..1e7cf71 100644
--- a/src/rules/require-properties.ts
+++ b/src/rules/require-properties.ts
@@ -6,6 +6,7 @@ import { createRequirePropertyRule } from "../utils/createRequirePropertyRule.js
 // in the format [propertyName, isRecommended]
 const properties = [
 	["author", false],
+	["description", true],
 	["engines", false],
 	["files", false],
 	["keywords", false],


Test patch:
diff --git a/src/tests/rules/require-description.test.ts b/src/tests/rules/require-description.test.ts
new file mode 100644
index 0000000..e30d312
--- /dev/null
+++ b/src/tests/rules/require-description.test.ts
@@ -0,0 +1,53 @@
+import { rules } from "../../rules/require-properties.js";
+import { ruleTester } from "./ruleTester.js";
+
+ruleTester.run("require-description", rules["require-description"], {
+	invalid: [
+		{
+			code: "{}",
+			errors: [
+				{
+					data: { property: "description" },
+					line: 1,
+					messageId: "missing",
+				},
+			],
+		},
+		{
+			code: `{
+            "name": "foo",
+            "version": "1.0.0"
+            }
+            `,
+			errors: [
+				{
+					data: { property: "description" },
+					line: 1,
+					messageId: "missing",
+				},
+			],
+		},
+		{
+			code: `{
+            "name": "foo",
+            "version": "1.0.0",
+            "bin": {
+                "description": "./cli.js"
+            }
+            }
+            `,
+			errors: [
+				{
+					data: { property: "description" },
+					line: 1,
+					messageId: "missing",
+				},
+			],
+		},
+	],
+	valid: [
+		`{ "main": "./index.js", "description": "Thee Silver Mt. Zion" }`,
+		`{ "description": "Thee Silver Mt. Zion" }`,
+		`{ "description": 123 }`,
+	],
+});