about summary refs log tree commit diff
path: root/compiler/rustc_error_codes/src
diff options
context:
space:
mode:
authorNicholas Nethercote <n.nethercote@gmail.com>2024-01-14 10:57:07 +1100
committerNicholas Nethercote <n.nethercote@gmail.com>2024-01-29 07:41:41 +1100
commit5d9dfbd08f38c2a9bc71d39de8f5c7776afe0f9e (patch)
tree6c1aab3f98a58ae9fd171fbd80732e4acbef7527 /compiler/rustc_error_codes/src
parent0321de27784f427057897f6b5693c97390e98371 (diff)
downloadrust-5d9dfbd08f38c2a9bc71d39de8f5c7776afe0f9e.tar.gz
rust-5d9dfbd08f38c2a9bc71d39de8f5c7776afe0f9e.zip
Stop using `String` for error codes.
Error codes are integers, but `String` is used everywhere to represent
them. Gross!

This commit introduces `ErrCode`, an integral newtype for error codes,
replacing `String`. It also introduces a constant for every error code,
e.g. `E0123`, and removes the `error_code!` macro. The constants are
imported wherever used with `use rustc_errors::codes::*`.

With the old code, we have three different ways to specify an error code
at a use point:
```
error_code!(E0123)  // macro call

struct_span_code_err!(dcx, span, E0123, "msg");  // bare ident arg to macro call

\#[diag(name, code = "E0123")]  // string
struct Diag;
```

With the new code, they all use the `E0123` constant.
```
E0123  // constant

struct_span_code_err!(dcx, span, E0123, "msg");  // constant

\#[diag(name, code = E0123)]  // constant
struct Diag;
```

The commit also changes the structure of the error code definitions:
- `rustc_error_codes` now just defines a higher-order macro listing the
  used error codes and nothing else.
- Because that's now the only thing in the `rustc_error_codes` crate, I
  moved it into the `lib.rs` file and removed the `error_codes.rs` file.
- `rustc_errors` uses that macro to define everything, e.g. the error
  code constants and the `DIAGNOSTIC_TABLES`. This is in its new
  `codes.rs` file.
Diffstat (limited to 'compiler/rustc_error_codes/src')
-rw-r--r--compiler/rustc_error_codes/src/error_codes.rs658
-rw-r--r--compiler/rustc_error_codes/src/lib.rs678
2 files changed, 669 insertions, 667 deletions
diff --git a/compiler/rustc_error_codes/src/error_codes.rs b/compiler/rustc_error_codes/src/error_codes.rs
deleted file mode 100644
index 9cd9ed54d41..00000000000
--- a/compiler/rustc_error_codes/src/error_codes.rs
+++ /dev/null
@@ -1,658 +0,0 @@
-// Error messages for EXXXX errors. Each message should start and end with a
-// new line, and be wrapped to 80 characters. In vim you can `:set tw=80` and
-// use `gq` to wrap paragraphs. Use `:set tw=0` to disable.
-//
-// /!\ IMPORTANT /!\
-//
-// Error messages' format must follow the RFC 1567 available here:
-// https://rust-lang.github.io/rfcs/1567-long-error-codes-explanation-normalization.html
-
-register_diagnostics! {
-E0001: include_str!("./error_codes/E0001.md"),
-E0002: include_str!("./error_codes/E0002.md"),
-E0004: include_str!("./error_codes/E0004.md"),
-E0005: include_str!("./error_codes/E0005.md"),
-E0007: include_str!("./error_codes/E0007.md"),
-E0009: include_str!("./error_codes/E0009.md"),
-E0010: include_str!("./error_codes/E0010.md"),
-E0013: include_str!("./error_codes/E0013.md"),
-E0014: include_str!("./error_codes/E0014.md"),
-E0015: include_str!("./error_codes/E0015.md"),
-E0023: include_str!("./error_codes/E0023.md"),
-E0025: include_str!("./error_codes/E0025.md"),
-E0026: include_str!("./error_codes/E0026.md"),
-E0027: include_str!("./error_codes/E0027.md"),
-E0029: include_str!("./error_codes/E0029.md"),
-E0030: include_str!("./error_codes/E0030.md"),
-E0033: include_str!("./error_codes/E0033.md"),
-E0034: include_str!("./error_codes/E0034.md"),
-E0038: include_str!("./error_codes/E0038.md"),
-E0040: include_str!("./error_codes/E0040.md"),
-E0044: include_str!("./error_codes/E0044.md"),
-E0045: include_str!("./error_codes/E0045.md"),
-E0046: include_str!("./error_codes/E0046.md"),
-E0049: include_str!("./error_codes/E0049.md"),
-E0050: include_str!("./error_codes/E0050.md"),
-E0053: include_str!("./error_codes/E0053.md"),
-E0054: include_str!("./error_codes/E0054.md"),
-E0055: include_str!("./error_codes/E0055.md"),
-E0057: include_str!("./error_codes/E0057.md"),
-E0059: include_str!("./error_codes/E0059.md"),
-E0060: include_str!("./error_codes/E0060.md"),
-E0061: include_str!("./error_codes/E0061.md"),
-E0062: include_str!("./error_codes/E0062.md"),
-E0063: include_str!("./error_codes/E0063.md"),
-E0067: include_str!("./error_codes/E0067.md"),
-E0069: include_str!("./error_codes/E0069.md"),
-E0070: include_str!("./error_codes/E0070.md"),
-E0071: include_str!("./error_codes/E0071.md"),
-E0072: include_str!("./error_codes/E0072.md"),
-E0073: include_str!("./error_codes/E0073.md"),
-E0074: include_str!("./error_codes/E0074.md"),
-E0075: include_str!("./error_codes/E0075.md"),
-E0076: include_str!("./error_codes/E0076.md"),
-E0077: include_str!("./error_codes/E0077.md"),
-E0080: include_str!("./error_codes/E0080.md"),
-E0081: include_str!("./error_codes/E0081.md"),
-E0084: include_str!("./error_codes/E0084.md"),
-E0087: include_str!("./error_codes/E0087.md"),
-E0088: include_str!("./error_codes/E0088.md"),
-E0089: include_str!("./error_codes/E0089.md"),
-E0090: include_str!("./error_codes/E0090.md"),
-E0091: include_str!("./error_codes/E0091.md"),
-E0092: include_str!("./error_codes/E0092.md"),
-E0093: include_str!("./error_codes/E0093.md"),
-E0094: include_str!("./error_codes/E0094.md"),
-E0106: include_str!("./error_codes/E0106.md"),
-E0107: include_str!("./error_codes/E0107.md"),
-E0109: include_str!("./error_codes/E0109.md"),
-E0110: include_str!("./error_codes/E0110.md"),
-E0116: include_str!("./error_codes/E0116.md"),
-E0117: include_str!("./error_codes/E0117.md"),
-E0118: include_str!("./error_codes/E0118.md"),
-E0119: include_str!("./error_codes/E0119.md"),
-E0120: include_str!("./error_codes/E0120.md"),
-E0121: include_str!("./error_codes/E0121.md"),
-E0124: include_str!("./error_codes/E0124.md"),
-E0128: include_str!("./error_codes/E0128.md"),
-E0130: include_str!("./error_codes/E0130.md"),
-E0131: include_str!("./error_codes/E0131.md"),
-E0132: include_str!("./error_codes/E0132.md"),
-E0133: include_str!("./error_codes/E0133.md"),
-E0136: include_str!("./error_codes/E0136.md"),
-E0137: include_str!("./error_codes/E0137.md"),
-E0138: include_str!("./error_codes/E0138.md"),
-E0139: include_str!("./error_codes/E0139.md"),
-E0152: include_str!("./error_codes/E0152.md"),
-E0154: include_str!("./error_codes/E0154.md"),
-E0158: include_str!("./error_codes/E0158.md"),
-E0161: include_str!("./error_codes/E0161.md"),
-E0162: include_str!("./error_codes/E0162.md"),
-E0164: include_str!("./error_codes/E0164.md"),
-E0165: include_str!("./error_codes/E0165.md"),
-E0170: include_str!("./error_codes/E0170.md"),
-E0178: include_str!("./error_codes/E0178.md"),
-E0183: include_str!("./error_codes/E0183.md"),
-E0184: include_str!("./error_codes/E0184.md"),
-E0185: include_str!("./error_codes/E0185.md"),
-E0186: include_str!("./error_codes/E0186.md"),
-E0191: include_str!("./error_codes/E0191.md"),
-E0192: include_str!("./error_codes/E0192.md"),
-E0193: include_str!("./error_codes/E0193.md"),
-E0195: include_str!("./error_codes/E0195.md"),
-E0197: include_str!("./error_codes/E0197.md"),
-E0198: include_str!("./error_codes/E0198.md"),
-E0199: include_str!("./error_codes/E0199.md"),
-E0200: include_str!("./error_codes/E0200.md"),
-E0201: include_str!("./error_codes/E0201.md"),
-E0203: include_str!("./error_codes/E0203.md"),
-E0204: include_str!("./error_codes/E0204.md"),
-E0205: include_str!("./error_codes/E0205.md"),
-E0206: include_str!("./error_codes/E0206.md"),
-E0207: include_str!("./error_codes/E0207.md"),
-E0208: include_str!("./error_codes/E0208.md"),
-E0210: include_str!("./error_codes/E0210.md"),
-E0211: include_str!("./error_codes/E0211.md"),
-E0212: include_str!("./error_codes/E0212.md"),
-E0214: include_str!("./error_codes/E0214.md"),
-E0220: include_str!("./error_codes/E0220.md"),
-E0221: include_str!("./error_codes/E0221.md"),
-E0222: include_str!("./error_codes/E0222.md"),
-E0223: include_str!("./error_codes/E0223.md"),
-E0224: include_str!("./error_codes/E0224.md"),
-E0225: include_str!("./error_codes/E0225.md"),
-E0226: include_str!("./error_codes/E0226.md"),
-E0227: include_str!("./error_codes/E0227.md"),
-E0228: include_str!("./error_codes/E0228.md"),
-E0229: include_str!("./error_codes/E0229.md"),
-E0230: include_str!("./error_codes/E0230.md"),
-E0231: include_str!("./error_codes/E0231.md"),
-E0232: include_str!("./error_codes/E0232.md"),
-E0243: include_str!("./error_codes/E0243.md"),
-E0244: include_str!("./error_codes/E0244.md"),
-E0251: include_str!("./error_codes/E0251.md"),
-E0252: include_str!("./error_codes/E0252.md"),
-E0253: include_str!("./error_codes/E0253.md"),
-E0254: include_str!("./error_codes/E0254.md"),
-E0255: include_str!("./error_codes/E0255.md"),
-E0256: include_str!("./error_codes/E0256.md"),
-E0259: include_str!("./error_codes/E0259.md"),
-E0260: include_str!("./error_codes/E0260.md"),
-E0261: include_str!("./error_codes/E0261.md"),
-E0262: include_str!("./error_codes/E0262.md"),
-E0263: include_str!("./error_codes/E0263.md"),
-E0264: include_str!("./error_codes/E0264.md"),
-E0267: include_str!("./error_codes/E0267.md"),
-E0268: include_str!("./error_codes/E0268.md"),
-E0271: include_str!("./error_codes/E0271.md"),
-E0275: include_str!("./error_codes/E0275.md"),
-E0276: include_str!("./error_codes/E0276.md"),
-E0277: include_str!("./error_codes/E0277.md"),
-E0281: include_str!("./error_codes/E0281.md"),
-E0282: include_str!("./error_codes/E0282.md"),
-E0283: include_str!("./error_codes/E0283.md"),
-E0284: include_str!("./error_codes/E0284.md"),
-E0297: include_str!("./error_codes/E0297.md"),
-E0301: include_str!("./error_codes/E0301.md"),
-E0302: include_str!("./error_codes/E0302.md"),
-E0303: include_str!("./error_codes/E0303.md"),
-E0307: include_str!("./error_codes/E0307.md"),
-E0308: include_str!("./error_codes/E0308.md"),
-E0309: include_str!("./error_codes/E0309.md"),
-E0310: include_str!("./error_codes/E0310.md"),
-E0311: include_str!("./error_codes/E0311.md"),
-E0312: include_str!("./error_codes/E0312.md"),
-E0316: include_str!("./error_codes/E0316.md"),
-E0317: include_str!("./error_codes/E0317.md"),
-E0320: include_str!("./error_codes/E0320.md"),
-E0321: include_str!("./error_codes/E0321.md"),
-E0322: include_str!("./error_codes/E0322.md"),
-E0323: include_str!("./error_codes/E0323.md"),
-E0324: include_str!("./error_codes/E0324.md"),
-E0325: include_str!("./error_codes/E0325.md"),
-E0326: include_str!("./error_codes/E0326.md"),
-E0328: include_str!("./error_codes/E0328.md"),
-E0329: include_str!("./error_codes/E0329.md"),
-E0364: include_str!("./error_codes/E0364.md"),
-E0365: include_str!("./error_codes/E0365.md"),
-E0366: include_str!("./error_codes/E0366.md"),
-E0367: include_str!("./error_codes/E0367.md"),
-E0368: include_str!("./error_codes/E0368.md"),
-E0369: include_str!("./error_codes/E0369.md"),
-E0370: include_str!("./error_codes/E0370.md"),
-E0371: include_str!("./error_codes/E0371.md"),
-E0373: include_str!("./error_codes/E0373.md"),
-E0374: include_str!("./error_codes/E0374.md"),
-E0375: include_str!("./error_codes/E0375.md"),
-E0376: include_str!("./error_codes/E0376.md"),
-E0377: include_str!("./error_codes/E0377.md"),
-E0378: include_str!("./error_codes/E0378.md"),
-E0379: include_str!("./error_codes/E0379.md"),
-E0380: include_str!("./error_codes/E0380.md"),
-E0381: include_str!("./error_codes/E0381.md"),
-E0382: include_str!("./error_codes/E0382.md"),
-E0383: include_str!("./error_codes/E0383.md"),
-E0384: include_str!("./error_codes/E0384.md"),
-E0386: include_str!("./error_codes/E0386.md"),
-E0387: include_str!("./error_codes/E0387.md"),
-E0388: include_str!("./error_codes/E0388.md"),
-E0389: include_str!("./error_codes/E0389.md"),
-E0390: include_str!("./error_codes/E0390.md"),
-E0391: include_str!("./error_codes/E0391.md"),
-E0392: include_str!("./error_codes/E0392.md"),
-E0393: include_str!("./error_codes/E0393.md"),
-E0398: include_str!("./error_codes/E0398.md"),
-E0399: include_str!("./error_codes/E0399.md"),
-E0401: include_str!("./error_codes/E0401.md"),
-E0403: include_str!("./error_codes/E0403.md"),
-E0404: include_str!("./error_codes/E0404.md"),
-E0405: include_str!("./error_codes/E0405.md"),
-E0407: include_str!("./error_codes/E0407.md"),
-E0408: include_str!("./error_codes/E0408.md"),
-E0409: include_str!("./error_codes/E0409.md"),
-E0411: include_str!("./error_codes/E0411.md"),
-E0412: include_str!("./error_codes/E0412.md"),
-E0415: include_str!("./error_codes/E0415.md"),
-E0416: include_str!("./error_codes/E0416.md"),
-E0422: include_str!("./error_codes/E0422.md"),
-E0423: include_str!("./error_codes/E0423.md"),
-E0424: include_str!("./error_codes/E0424.md"),
-E0425: include_str!("./error_codes/E0425.md"),
-E0426: include_str!("./error_codes/E0426.md"),
-E0428: include_str!("./error_codes/E0428.md"),
-E0429: include_str!("./error_codes/E0429.md"),
-E0430: include_str!("./error_codes/E0430.md"),
-E0431: include_str!("./error_codes/E0431.md"),
-E0432: include_str!("./error_codes/E0432.md"),
-E0433: include_str!("./error_codes/E0433.md"),
-E0434: include_str!("./error_codes/E0434.md"),
-E0435: include_str!("./error_codes/E0435.md"),
-E0436: include_str!("./error_codes/E0436.md"),
-E0437: include_str!("./error_codes/E0437.md"),
-E0438: include_str!("./error_codes/E0438.md"),
-E0439: include_str!("./error_codes/E0439.md"),
-E0445: include_str!("./error_codes/E0445.md"),
-E0446: include_str!("./error_codes/E0446.md"),
-E0447: include_str!("./error_codes/E0447.md"),
-E0448: include_str!("./error_codes/E0448.md"),
-E0449: include_str!("./error_codes/E0449.md"),
-E0451: include_str!("./error_codes/E0451.md"),
-E0452: include_str!("./error_codes/E0452.md"),
-E0453: include_str!("./error_codes/E0453.md"),
-E0454: include_str!("./error_codes/E0454.md"),
-E0455: include_str!("./error_codes/E0455.md"),
-E0457: include_str!("./error_codes/E0457.md"),
-E0458: include_str!("./error_codes/E0458.md"),
-E0459: include_str!("./error_codes/E0459.md"),
-E0460: include_str!("./error_codes/E0460.md"),
-E0461: include_str!("./error_codes/E0461.md"),
-E0462: include_str!("./error_codes/E0462.md"),
-E0463: include_str!("./error_codes/E0463.md"),
-E0464: include_str!("./error_codes/E0464.md"),
-E0466: include_str!("./error_codes/E0466.md"),
-E0468: include_str!("./error_codes/E0468.md"),
-E0469: include_str!("./error_codes/E0469.md"),
-E0472: include_str!("./error_codes/E0472.md"),
-E0476: include_str!("./error_codes/E0476.md"),
-E0477: include_str!("./error_codes/E0477.md"),
-E0478: include_str!("./error_codes/E0478.md"),
-E0482: include_str!("./error_codes/E0482.md"),
-E0491: include_str!("./error_codes/E0491.md"),
-E0492: include_str!("./error_codes/E0492.md"),
-E0493: include_str!("./error_codes/E0493.md"),
-E0495: include_str!("./error_codes/E0495.md"),
-E0496: include_str!("./error_codes/E0496.md"),
-E0497: include_str!("./error_codes/E0497.md"),
-E0498: include_str!("./error_codes/E0498.md"),
-E0499: include_str!("./error_codes/E0499.md"),
-E0500: include_str!("./error_codes/E0500.md"),
-E0501: include_str!("./error_codes/E0501.md"),
-E0502: include_str!("./error_codes/E0502.md"),
-E0503: include_str!("./error_codes/E0503.md"),
-E0504: include_str!("./error_codes/E0504.md"),
-E0505: include_str!("./error_codes/E0505.md"),
-E0506: include_str!("./error_codes/E0506.md"),
-E0507: include_str!("./error_codes/E0507.md"),
-E0508: include_str!("./error_codes/E0508.md"),
-E0509: include_str!("./error_codes/E0509.md"),
-E0510: include_str!("./error_codes/E0510.md"),
-E0511: include_str!("./error_codes/E0511.md"),
-E0512: include_str!("./error_codes/E0512.md"),
-E0514: include_str!("./error_codes/E0514.md"),
-E0515: include_str!("./error_codes/E0515.md"),
-E0516: include_str!("./error_codes/E0516.md"),
-E0517: include_str!("./error_codes/E0517.md"),
-E0518: include_str!("./error_codes/E0518.md"),
-E0519: include_str!("./error_codes/E0519.md"),
-E0520: include_str!("./error_codes/E0520.md"),
-E0521: include_str!("./error_codes/E0521.md"),
-E0522: include_str!("./error_codes/E0522.md"),
-E0523: include_str!("./error_codes/E0523.md"),
-E0524: include_str!("./error_codes/E0524.md"),
-E0525: include_str!("./error_codes/E0525.md"),
-E0527: include_str!("./error_codes/E0527.md"),
-E0528: include_str!("./error_codes/E0528.md"),
-E0529: include_str!("./error_codes/E0529.md"),
-E0530: include_str!("./error_codes/E0530.md"),
-E0531: include_str!("./error_codes/E0531.md"),
-E0532: include_str!("./error_codes/E0532.md"),
-E0533: include_str!("./error_codes/E0533.md"),
-E0534: include_str!("./error_codes/E0534.md"),
-E0535: include_str!("./error_codes/E0535.md"),
-E0536: include_str!("./error_codes/E0536.md"),
-E0537: include_str!("./error_codes/E0537.md"),
-E0538: include_str!("./error_codes/E0538.md"),
-E0539: include_str!("./error_codes/E0539.md"),
-E0541: include_str!("./error_codes/E0541.md"),
-E0542: include_str!("./error_codes/E0542.md"),
-E0543: include_str!("./error_codes/E0543.md"),
-E0544: include_str!("./error_codes/E0544.md"),
-E0545: include_str!("./error_codes/E0545.md"),
-E0546: include_str!("./error_codes/E0546.md"),
-E0547: include_str!("./error_codes/E0547.md"),
-E0549: include_str!("./error_codes/E0549.md"),
-E0550: include_str!("./error_codes/E0550.md"),
-E0551: include_str!("./error_codes/E0551.md"),
-E0552: include_str!("./error_codes/E0552.md"),
-E0554: include_str!("./error_codes/E0554.md"),
-E0556: include_str!("./error_codes/E0556.md"),
-E0557: include_str!("./error_codes/E0557.md"),
-E0559: include_str!("./error_codes/E0559.md"),
-E0560: include_str!("./error_codes/E0560.md"),
-E0561: include_str!("./error_codes/E0561.md"),
-E0562: include_str!("./error_codes/E0562.md"),
-E0565: include_str!("./error_codes/E0565.md"),
-E0566: include_str!("./error_codes/E0566.md"),
-E0567: include_str!("./error_codes/E0567.md"),
-E0568: include_str!("./error_codes/E0568.md"),
-E0569: include_str!("./error_codes/E0569.md"),
-E0570: include_str!("./error_codes/E0570.md"),
-E0571: include_str!("./error_codes/E0571.md"),
-E0572: include_str!("./error_codes/E0572.md"),
-E0573: include_str!("./error_codes/E0573.md"),
-E0574: include_str!("./error_codes/E0574.md"),
-E0575: include_str!("./error_codes/E0575.md"),
-E0576: include_str!("./error_codes/E0576.md"),
-E0577: include_str!("./error_codes/E0577.md"),
-E0578: include_str!("./error_codes/E0578.md"),
-E0579: include_str!("./error_codes/E0579.md"),
-E0580: include_str!("./error_codes/E0580.md"),
-E0581: include_str!("./error_codes/E0581.md"),
-E0582: include_str!("./error_codes/E0582.md"),
-E0583: include_str!("./error_codes/E0583.md"),
-E0584: include_str!("./error_codes/E0584.md"),
-E0585: include_str!("./error_codes/E0585.md"),
-E0586: include_str!("./error_codes/E0586.md"),
-E0587: include_str!("./error_codes/E0587.md"),
-E0588: include_str!("./error_codes/E0588.md"),
-E0589: include_str!("./error_codes/E0589.md"),
-E0590: include_str!("./error_codes/E0590.md"),
-E0591: include_str!("./error_codes/E0591.md"),
-E0592: include_str!("./error_codes/E0592.md"),
-E0593: include_str!("./error_codes/E0593.md"),
-E0594: include_str!("./error_codes/E0594.md"),
-E0595: include_str!("./error_codes/E0595.md"),
-E0596: include_str!("./error_codes/E0596.md"),
-E0597: include_str!("./error_codes/E0597.md"),
-E0599: include_str!("./error_codes/E0599.md"),
-E0600: include_str!("./error_codes/E0600.md"),
-E0601: include_str!("./error_codes/E0601.md"),
-E0602: include_str!("./error_codes/E0602.md"),
-E0603: include_str!("./error_codes/E0603.md"),
-E0604: include_str!("./error_codes/E0604.md"),
-E0605: include_str!("./error_codes/E0605.md"),
-E0606: include_str!("./error_codes/E0606.md"),
-E0607: include_str!("./error_codes/E0607.md"),
-E0608: include_str!("./error_codes/E0608.md"),
-E0609: include_str!("./error_codes/E0609.md"),
-E0610: include_str!("./error_codes/E0610.md"),
-E0614: include_str!("./error_codes/E0614.md"),
-E0615: include_str!("./error_codes/E0615.md"),
-E0616: include_str!("./error_codes/E0616.md"),
-E0617: include_str!("./error_codes/E0617.md"),
-E0618: include_str!("./error_codes/E0618.md"),
-E0619: include_str!("./error_codes/E0619.md"),
-E0620: include_str!("./error_codes/E0620.md"),
-E0621: include_str!("./error_codes/E0621.md"),
-E0622: include_str!("./error_codes/E0622.md"),
-E0623: include_str!("./error_codes/E0623.md"),
-E0624: include_str!("./error_codes/E0624.md"),
-E0625: include_str!("./error_codes/E0625.md"),
-E0626: include_str!("./error_codes/E0626.md"),
-E0627: include_str!("./error_codes/E0627.md"),
-E0628: include_str!("./error_codes/E0628.md"),
-E0631: include_str!("./error_codes/E0631.md"),
-E0632: include_str!("./error_codes/E0632.md"),
-E0633: include_str!("./error_codes/E0633.md"),
-E0634: include_str!("./error_codes/E0634.md"),
-E0635: include_str!("./error_codes/E0635.md"),
-E0636: include_str!("./error_codes/E0636.md"),
-E0637: include_str!("./error_codes/E0637.md"),
-E0638: include_str!("./error_codes/E0638.md"),
-E0639: include_str!("./error_codes/E0639.md"),
-E0640: include_str!("./error_codes/E0640.md"),
-E0641: include_str!("./error_codes/E0641.md"),
-E0642: include_str!("./error_codes/E0642.md"),
-E0643: include_str!("./error_codes/E0643.md"),
-E0644: include_str!("./error_codes/E0644.md"),
-E0646: include_str!("./error_codes/E0646.md"),
-E0647: include_str!("./error_codes/E0647.md"),
-E0648: include_str!("./error_codes/E0648.md"),
-E0657: include_str!("./error_codes/E0657.md"),
-E0658: include_str!("./error_codes/E0658.md"),
-E0659: include_str!("./error_codes/E0659.md"),
-E0660: include_str!("./error_codes/E0660.md"),
-E0661: include_str!("./error_codes/E0661.md"),
-E0662: include_str!("./error_codes/E0662.md"),
-E0663: include_str!("./error_codes/E0663.md"),
-E0664: include_str!("./error_codes/E0664.md"),
-E0665: include_str!("./error_codes/E0665.md"),
-E0666: include_str!("./error_codes/E0666.md"),
-E0667: include_str!("./error_codes/E0667.md"),
-E0668: include_str!("./error_codes/E0668.md"),
-E0669: include_str!("./error_codes/E0669.md"),
-E0670: include_str!("./error_codes/E0670.md"),
-E0671: include_str!("./error_codes/E0671.md"),
-E0687: include_str!("./error_codes/E0687.md"),
-E0688: include_str!("./error_codes/E0688.md"),
-E0689: include_str!("./error_codes/E0689.md"),
-E0690: include_str!("./error_codes/E0690.md"),
-E0691: include_str!("./error_codes/E0691.md"),
-E0692: include_str!("./error_codes/E0692.md"),
-E0693: include_str!("./error_codes/E0693.md"),
-E0695: include_str!("./error_codes/E0695.md"),
-E0696: include_str!("./error_codes/E0696.md"),
-E0697: include_str!("./error_codes/E0697.md"),
-E0698: include_str!("./error_codes/E0698.md"),
-E0699: include_str!("./error_codes/E0699.md"),
-E0700: include_str!("./error_codes/E0700.md"),
-E0701: include_str!("./error_codes/E0701.md"),
-E0703: include_str!("./error_codes/E0703.md"),
-E0704: include_str!("./error_codes/E0704.md"),
-E0705: include_str!("./error_codes/E0705.md"),
-E0706: include_str!("./error_codes/E0706.md"),
-E0708: include_str!("./error_codes/E0708.md"),
-E0710: include_str!("./error_codes/E0710.md"),
-E0712: include_str!("./error_codes/E0712.md"),
-E0713: include_str!("./error_codes/E0713.md"),
-E0714: include_str!("./error_codes/E0714.md"),
-E0715: include_str!("./error_codes/E0715.md"),
-E0716: include_str!("./error_codes/E0716.md"),
-E0711: include_str!("./error_codes/E0711.md"),
-E0717: include_str!("./error_codes/E0717.md"),
-E0718: include_str!("./error_codes/E0718.md"),
-E0719: include_str!("./error_codes/E0719.md"),
-E0720: include_str!("./error_codes/E0720.md"),
-E0722: include_str!("./error_codes/E0722.md"),
-E0724: include_str!("./error_codes/E0724.md"),
-E0725: include_str!("./error_codes/E0725.md"),
-E0726: include_str!("./error_codes/E0726.md"),
-E0727: include_str!("./error_codes/E0727.md"),
-E0728: include_str!("./error_codes/E0728.md"),
-E0729: include_str!("./error_codes/E0729.md"),
-E0730: include_str!("./error_codes/E0730.md"),
-E0731: include_str!("./error_codes/E0731.md"),
-E0732: include_str!("./error_codes/E0732.md"),
-E0733: include_str!("./error_codes/E0733.md"),
-E0734: include_str!("./error_codes/E0734.md"),
-E0735: include_str!("./error_codes/E0735.md"),
-E0736: include_str!("./error_codes/E0736.md"),
-E0737: include_str!("./error_codes/E0737.md"),
-E0739: include_str!("./error_codes/E0739.md"),
-E0740: include_str!("./error_codes/E0740.md"),
-E0741: include_str!("./error_codes/E0741.md"),
-E0742: include_str!("./error_codes/E0742.md"),
-E0743: include_str!("./error_codes/E0743.md"),
-E0744: include_str!("./error_codes/E0744.md"),
-E0745: include_str!("./error_codes/E0745.md"),
-E0746: include_str!("./error_codes/E0746.md"),
-E0747: include_str!("./error_codes/E0747.md"),
-E0748: include_str!("./error_codes/E0748.md"),
-E0749: include_str!("./error_codes/E0749.md"),
-E0750: include_str!("./error_codes/E0750.md"),
-E0751: include_str!("./error_codes/E0751.md"),
-E0752: include_str!("./error_codes/E0752.md"),
-E0753: include_str!("./error_codes/E0753.md"),
-E0754: include_str!("./error_codes/E0754.md"),
-E0755: include_str!("./error_codes/E0755.md"),
-E0756: include_str!("./error_codes/E0756.md"),
-E0757: include_str!("./error_codes/E0757.md"),
-E0758: include_str!("./error_codes/E0758.md"),
-E0759: include_str!("./error_codes/E0759.md"),
-E0760: include_str!("./error_codes/E0760.md"),
-E0761: include_str!("./error_codes/E0761.md"),
-E0762: include_str!("./error_codes/E0762.md"),
-E0763: include_str!("./error_codes/E0763.md"),
-E0764: include_str!("./error_codes/E0764.md"),
-E0765: include_str!("./error_codes/E0765.md"),
-E0766: include_str!("./error_codes/E0766.md"),
-E0767: include_str!("./error_codes/E0767.md"),
-E0768: include_str!("./error_codes/E0768.md"),
-E0769: include_str!("./error_codes/E0769.md"),
-E0770: include_str!("./error_codes/E0770.md"),
-E0771: include_str!("./error_codes/E0771.md"),
-E0772: include_str!("./error_codes/E0772.md"),
-E0773: include_str!("./error_codes/E0773.md"),
-E0774: include_str!("./error_codes/E0774.md"),
-E0775: include_str!("./error_codes/E0775.md"),
-E0776: include_str!("./error_codes/E0776.md"),
-E0777: include_str!("./error_codes/E0777.md"),
-E0778: include_str!("./error_codes/E0778.md"),
-E0779: include_str!("./error_codes/E0779.md"),
-E0780: include_str!("./error_codes/E0780.md"),
-E0781: include_str!("./error_codes/E0781.md"),
-E0782: include_str!("./error_codes/E0782.md"),
-E0783: include_str!("./error_codes/E0783.md"),
-E0784: include_str!("./error_codes/E0784.md"),
-E0785: include_str!("./error_codes/E0785.md"),
-E0786: include_str!("./error_codes/E0786.md"),
-E0787: include_str!("./error_codes/E0787.md"),
-E0788: include_str!("./error_codes/E0788.md"),
-E0789: include_str!("./error_codes/E0789.md"),
-E0790: include_str!("./error_codes/E0790.md"),
-E0791: include_str!("./error_codes/E0791.md"),
-E0792: include_str!("./error_codes/E0792.md"),
-E0793: include_str!("./error_codes/E0793.md"),
-E0794: include_str!("./error_codes/E0794.md"),
-E0795: include_str!("./error_codes/E0795.md"),
-E0796: include_str!("./error_codes/E0796.md"),
-E0797: include_str!("./error_codes/E0797.md"),
-}
-
-// Undocumented removed error codes. Note that many removed error codes are kept in the list above
-// and marked as no-longer emitted with a note in the markdown file (see E0001 for an example).
-//  E0006, // merged with E0005
-//  E0008, // cannot bind by-move into a pattern guard
-//  E0019, // merged into E0015
-//  E0035, // merged into E0087/E0089
-//  E0036, // merged into E0087/E0089
-//  E0068,
-//  E0085,
-//  E0086,
-//  E0101, // replaced with E0282
-//  E0102, // replaced with E0282
-//  E0103,
-//  E0104,
-//  E0122, // bounds in type aliases are ignored, turned into proper lint
-//  E0123,
-//  E0127,
-//  E0129,
-//  E0134,
-//  E0135,
-//  E0141,
-//  E0153, // unused error code
-//  E0157, // unused error code
-//  E0159, // use of trait `{}` as struct constructor
-//  E0163, // merged into E0071
-//  E0167,
-//  E0168,
-//  E0172, // non-trait found in a type sum, moved to resolve
-//  E0173, // manual implementations of unboxed closure traits are experimental
-//  E0174,
-//  E0182, // merged into E0229
-//  E0187, // cannot infer the kind of the closure
-//  E0188, // can not cast an immutable reference to a mutable pointer
-//  E0189, // deprecated: can only cast a boxed pointer to a boxed object
-//  E0190, // deprecated: can only cast a &-pointer to an &-object
-//  E0194, // merged into E0403
-//  E0196, // cannot determine a type for this closure
-//  E0209, // builtin traits can only be implemented on structs or enums
-//  E0213, // associated types are not accepted in this context
-//  E0215, // angle-bracket notation is not stable with `Fn`
-//  E0216, // parenthetical notation is only stable with `Fn`
-//  E0217, // ambiguous associated type, defined in multiple supertraits
-//  E0218, // no associated type defined
-//  E0219, // associated type defined in higher-ranked supertrait
-//  E0233,
-//  E0234,
-//  E0235, // structure constructor specifies a structure of type but
-//  E0236, // no lang item for range syntax
-//  E0237, // no lang item for range syntax
-//  E0238, // parenthesized parameters may only be used with a trait
-//  E0239, // `next` method of `Iterator` trait has unexpected type
-//  E0240,
-//  E0241,
-//  E0242,
-//  E0245, // not a trait
-//  E0246, // invalid recursive type
-//  E0247,
-//  E0248, // value used as a type, now reported earlier during resolution
-//         // as E0412
-//  E0249,
-//  E0257,
-//  E0258,
-//  E0272, // on_unimplemented #0
-//  E0273, // on_unimplemented #1
-//  E0274, // on_unimplemented #2
-//  E0278, // requirement is not satisfied
-//  E0279,
-//  E0280, // changed to ICE
-//  E0285, // overflow evaluation builtin bounds
-//  E0296, // replaced with a generic attribute input check
-//  E0298, // cannot compare constants
-//  E0299, // mismatched types between arms
-//  E0300, // unexpanded macro
-//  E0304, // expected signed integer constant
-//  E0305, // expected constant
-//  E0313, // removed: found unreachable
-//  E0314, // closure outlives stack frame
-//  E0315, // cannot invoke closure outside of its lifetime
-//  E0319, // trait impls for defaulted traits allowed just for structs/enums
-//  E0372, // coherence not object safe
-//  E0385, // {} in an aliasable location
-//  E0402, // cannot use an outer type parameter in this context
-//  E0406, // merged into 420
-//  E0410, // merged into 408
-//  E0413, // merged into 530
-//  E0414, // merged into 530
-//  E0417, // merged into 532
-//  E0418, // merged into 532
-//  E0419, // merged into 531
-//  E0420, // merged into 532
-//  E0421, // merged into 531
-//  E0427, // merged into 530
-//  E0445, // merged into 446 and type privacy lints
-//  E0456, // plugin `..` is not available for triple `..`
-//  E0465, // removed: merged with E0464
-//  E0467, // removed
-//  E0470, // removed
-//  E0471, // constant evaluation error (in pattern)
-//  E0473, // dereference of reference outside its lifetime
-//  E0474, // captured variable `..` does not outlive the enclosing closure
-//  E0475, // index of slice outside its lifetime
-//  E0479, // the type `..` (provided as the value of a type parameter) is...
-//  E0480, // lifetime of method receiver does not outlive the method call
-//  E0481, // lifetime of function argument does not outlive the function call
-//  E0483, // lifetime of operand does not outlive the operation
-//  E0484, // reference is not valid at the time of borrow
-//  E0485, // automatically reference is not valid at the time of borrow
-//  E0486, // type of expression contains references that are not valid during..
-//  E0487, // unsafe use of destructor: destructor might be called while...
-//  E0488, // lifetime of variable does not enclose its declaration
-//  E0489, // type/lifetime parameter not in scope here
-//  E0490, // removed: unreachable
-//  E0526, // shuffle indices are not constant
-//  E0540, // multiple rustc_deprecated attributes
-//  E0548, // replaced with a generic attribute input check
-//  E0553, // multiple rustc_const_unstable attributes
-//  E0555, // replaced with a generic attribute input check
-//  E0558, // replaced with a generic attribute input check
-//  E0563, // cannot determine a type for this `impl Trait` removed in 6383de15
-//  E0564, // only named lifetimes are allowed in `impl Trait`,
-//         // but `{}` was found in the type `{}`
-//  E0598, // lifetime of {} is too short to guarantee its contents can be...
-//  E0611, // merged into E0616
-//  E0612, // merged into E0609
-//  E0613, // Removed (merged with E0609)
-//  E0629, // missing 'feature' (rustc_const_unstable)
-//  E0630, // rustc_const_unstable attribute must be paired with stable/unstable
-//         // attribute
-//  E0645, // trait aliases not finished
-//  E0694, // an unknown tool name found in scoped attributes
-//  E0702, // replaced with a generic attribute input check
-//  E0707, // multiple elided lifetimes used in arguments of `async fn`
-//  E0709, // multiple different lifetimes used in arguments of `async fn`
-//  E0721, // `await` keyword
-//  E0723, // unstable feature in `const` context
-//  E0738, // Removed; errored on `#[track_caller] fn`s in `extern "Rust" { ... }`.
-//  E0744, // merged into E0728
diff --git a/compiler/rustc_error_codes/src/lib.rs b/compiler/rustc_error_codes/src/lib.rs
index dd281811636..5b2766618fc 100644
--- a/compiler/rustc_error_codes/src/lib.rs
+++ b/compiler/rustc_error_codes/src/lib.rs
@@ -1,19 +1,679 @@
+//! This library is used to gather all error codes into one place, to make
+//! their maintenance easier.
+
 #![allow(internal_features)]
 #![feature(rustdoc_internals)]
 #![doc(rust_logo)]
 #![deny(rustdoc::invalid_codeblock_attributes)]
 #![deny(rustc::untranslatable_diagnostic)]
 #![deny(rustc::diagnostic_outside_of_impl)]
-//! This library is used to gather all error codes into one place,
-//! the goal being to make their maintenance easier.
 
-macro_rules! register_diagnostics {
-    ($($ecode:ident: $message:expr,)*) => (
-        pub static DIAGNOSTICS: &[(&str, &str)] = &[
-            $( (stringify!($ecode), $message), )*
-        ];
+// This higher-order macro defines the error codes that are in use. It is used
+// in the `rustc_errors` crate. Removed error codes are listed in the comment
+// below.
+//
+// /!\ IMPORTANT /!\
+//
+// Error code explanation are defined in `error_codes/EXXXX.md` files. They must follow the RFC
+// 1567 available here:
+// https://rust-lang.github.io/rfcs/1567-long-error-codes-explanation-normalization.html
+//
+// Also, the contents of this macro is checked by tidy (in `check_error_codes_docs`). If you change
+// the macro syntax you will need to change tidy as well.
+//
+// Both columns are necessary because it's not possible in Rust to create a new identifier such as
+// `E0123` from an integer literal such as `0123`, unfortunately.
+#[macro_export]
+macro_rules! error_codes {
+    ($macro:path) => (
+        $macro!(
+E0001: 0001,
+E0002: 0002,
+E0004: 0004,
+E0005: 0005,
+E0007: 0007,
+E0009: 0009,
+E0010: 0010,
+E0013: 0013,
+E0014: 0014,
+E0015: 0015,
+E0023: 0023,
+E0025: 0025,
+E0026: 0026,
+E0027: 0027,
+E0029: 0029,
+E0030: 0030,
+E0033: 0033,
+E0034: 0034,
+E0038: 0038,
+E0040: 0040,
+E0044: 0044,
+E0045: 0045,
+E0046: 0046,
+E0049: 0049,
+E0050: 0050,
+E0053: 0053,
+E0054: 0054,
+E0055: 0055,
+E0057: 0057,
+E0059: 0059,
+E0060: 0060,
+E0061: 0061,
+E0062: 0062,
+E0063: 0063,
+E0067: 0067,
+E0069: 0069,
+E0070: 0070,
+E0071: 0071,
+E0072: 0072,
+E0073: 0073,
+E0074: 0074,
+E0075: 0075,
+E0076: 0076,
+E0077: 0077,
+E0080: 0080,
+E0081: 0081,
+E0084: 0084,
+E0087: 0087,
+E0088: 0088,
+E0089: 0089,
+E0090: 0090,
+E0091: 0091,
+E0092: 0092,
+E0093: 0093,
+E0094: 0094,
+E0106: 0106,
+E0107: 0107,
+E0109: 0109,
+E0110: 0110,
+E0116: 0116,
+E0117: 0117,
+E0118: 0118,
+E0119: 0119,
+E0120: 0120,
+E0121: 0121,
+E0124: 0124,
+E0128: 0128,
+E0130: 0130,
+E0131: 0131,
+E0132: 0132,
+E0133: 0133,
+E0136: 0136,
+E0137: 0137,
+E0138: 0138,
+E0139: 0139,
+E0152: 0152,
+E0154: 0154,
+E0158: 0158,
+E0161: 0161,
+E0162: 0162,
+E0164: 0164,
+E0165: 0165,
+E0170: 0170,
+E0178: 0178,
+E0183: 0183,
+E0184: 0184,
+E0185: 0185,
+E0186: 0186,
+E0191: 0191,
+E0192: 0192,
+E0193: 0193,
+E0195: 0195,
+E0197: 0197,
+E0198: 0198,
+E0199: 0199,
+E0200: 0200,
+E0201: 0201,
+E0203: 0203,
+E0204: 0204,
+E0205: 0205,
+E0206: 0206,
+E0207: 0207,
+E0208: 0208,
+E0210: 0210,
+E0211: 0211,
+E0212: 0212,
+E0214: 0214,
+E0220: 0220,
+E0221: 0221,
+E0222: 0222,
+E0223: 0223,
+E0224: 0224,
+E0225: 0225,
+E0226: 0226,
+E0227: 0227,
+E0228: 0228,
+E0229: 0229,
+E0230: 0230,
+E0231: 0231,
+E0232: 0232,
+E0243: 0243,
+E0244: 0244,
+E0251: 0251,
+E0252: 0252,
+E0253: 0253,
+E0254: 0254,
+E0255: 0255,
+E0256: 0256,
+E0259: 0259,
+E0260: 0260,
+E0261: 0261,
+E0262: 0262,
+E0263: 0263,
+E0264: 0264,
+E0267: 0267,
+E0268: 0268,
+E0271: 0271,
+E0275: 0275,
+E0276: 0276,
+E0277: 0277,
+E0281: 0281,
+E0282: 0282,
+E0283: 0283,
+E0284: 0284,
+E0297: 0297,
+E0301: 0301,
+E0302: 0302,
+E0303: 0303,
+E0307: 0307,
+E0308: 0308,
+E0309: 0309,
+E0310: 0310,
+E0311: 0311,
+E0312: 0312,
+E0316: 0316,
+E0317: 0317,
+E0320: 0320,
+E0321: 0321,
+E0322: 0322,
+E0323: 0323,
+E0324: 0324,
+E0325: 0325,
+E0326: 0326,
+E0328: 0328,
+E0329: 0329,
+E0364: 0364,
+E0365: 0365,
+E0366: 0366,
+E0367: 0367,
+E0368: 0368,
+E0369: 0369,
+E0370: 0370,
+E0371: 0371,
+E0373: 0373,
+E0374: 0374,
+E0375: 0375,
+E0376: 0376,
+E0377: 0377,
+E0378: 0378,
+E0379: 0379,
+E0380: 0380,
+E0381: 0381,
+E0382: 0382,
+E0383: 0383,
+E0384: 0384,
+E0386: 0386,
+E0387: 0387,
+E0388: 0388,
+E0389: 0389,
+E0390: 0390,
+E0391: 0391,
+E0392: 0392,
+E0393: 0393,
+E0398: 0398,
+E0399: 0399,
+E0401: 0401,
+E0403: 0403,
+E0404: 0404,
+E0405: 0405,
+E0407: 0407,
+E0408: 0408,
+E0409: 0409,
+E0411: 0411,
+E0412: 0412,
+E0415: 0415,
+E0416: 0416,
+E0422: 0422,
+E0423: 0423,
+E0424: 0424,
+E0425: 0425,
+E0426: 0426,
+E0428: 0428,
+E0429: 0429,
+E0430: 0430,
+E0431: 0431,
+E0432: 0432,
+E0433: 0433,
+E0434: 0434,
+E0435: 0435,
+E0436: 0436,
+E0437: 0437,
+E0438: 0438,
+E0439: 0439,
+E0445: 0445,
+E0446: 0446,
+E0447: 0447,
+E0448: 0448,
+E0449: 0449,
+E0451: 0451,
+E0452: 0452,
+E0453: 0453,
+E0454: 0454,
+E0455: 0455,
+E0457: 0457,
+E0458: 0458,
+E0459: 0459,
+E0460: 0460,
+E0461: 0461,
+E0462: 0462,
+E0463: 0463,
+E0464: 0464,
+E0466: 0466,
+E0468: 0468,
+E0469: 0469,
+E0472: 0472,
+E0476: 0476,
+E0477: 0477,
+E0478: 0478,
+E0482: 0482,
+E0491: 0491,
+E0492: 0492,
+E0493: 0493,
+E0495: 0495,
+E0496: 0496,
+E0497: 0497,
+E0498: 0498,
+E0499: 0499,
+E0500: 0500,
+E0501: 0501,
+E0502: 0502,
+E0503: 0503,
+E0504: 0504,
+E0505: 0505,
+E0506: 0506,
+E0507: 0507,
+E0508: 0508,
+E0509: 0509,
+E0510: 0510,
+E0511: 0511,
+E0512: 0512,
+E0514: 0514,
+E0515: 0515,
+E0516: 0516,
+E0517: 0517,
+E0518: 0518,
+E0519: 0519,
+E0520: 0520,
+E0521: 0521,
+E0522: 0522,
+E0523: 0523,
+E0524: 0524,
+E0525: 0525,
+E0527: 0527,
+E0528: 0528,
+E0529: 0529,
+E0530: 0530,
+E0531: 0531,
+E0532: 0532,
+E0533: 0533,
+E0534: 0534,
+E0535: 0535,
+E0536: 0536,
+E0537: 0537,
+E0538: 0538,
+E0539: 0539,
+E0541: 0541,
+E0542: 0542,
+E0543: 0543,
+E0544: 0544,
+E0545: 0545,
+E0546: 0546,
+E0547: 0547,
+E0549: 0549,
+E0550: 0550,
+E0551: 0551,
+E0552: 0552,
+E0554: 0554,
+E0556: 0556,
+E0557: 0557,
+E0559: 0559,
+E0560: 0560,
+E0561: 0561,
+E0562: 0562,
+E0565: 0565,
+E0566: 0566,
+E0567: 0567,
+E0568: 0568,
+E0569: 0569,
+E0570: 0570,
+E0571: 0571,
+E0572: 0572,
+E0573: 0573,
+E0574: 0574,
+E0575: 0575,
+E0576: 0576,
+E0577: 0577,
+E0578: 0578,
+E0579: 0579,
+E0580: 0580,
+E0581: 0581,
+E0582: 0582,
+E0583: 0583,
+E0584: 0584,
+E0585: 0585,
+E0586: 0586,
+E0587: 0587,
+E0588: 0588,
+E0589: 0589,
+E0590: 0590,
+E0591: 0591,
+E0592: 0592,
+E0593: 0593,
+E0594: 0594,
+E0595: 0595,
+E0596: 0596,
+E0597: 0597,
+E0599: 0599,
+E0600: 0600,
+E0601: 0601,
+E0602: 0602,
+E0603: 0603,
+E0604: 0604,
+E0605: 0605,
+E0606: 0606,
+E0607: 0607,
+E0608: 0608,
+E0609: 0609,
+E0610: 0610,
+E0614: 0614,
+E0615: 0615,
+E0616: 0616,
+E0617: 0617,
+E0618: 0618,
+E0619: 0619,
+E0620: 0620,
+E0621: 0621,
+E0622: 0622,
+E0623: 0623,
+E0624: 0624,
+E0625: 0625,
+E0626: 0626,
+E0627: 0627,
+E0628: 0628,
+E0631: 0631,
+E0632: 0632,
+E0633: 0633,
+E0634: 0634,
+E0635: 0635,
+E0636: 0636,
+E0637: 0637,
+E0638: 0638,
+E0639: 0639,
+E0640: 0640,
+E0641: 0641,
+E0642: 0642,
+E0643: 0643,
+E0644: 0644,
+E0646: 0646,
+E0647: 0647,
+E0648: 0648,
+E0657: 0657,
+E0658: 0658,
+E0659: 0659,
+E0660: 0660,
+E0661: 0661,
+E0662: 0662,
+E0663: 0663,
+E0664: 0664,
+E0665: 0665,
+E0666: 0666,
+E0667: 0667,
+E0668: 0668,
+E0669: 0669,
+E0670: 0670,
+E0671: 0671,
+E0687: 0687,
+E0688: 0688,
+E0689: 0689,
+E0690: 0690,
+E0691: 0691,
+E0692: 0692,
+E0693: 0693,
+E0695: 0695,
+E0696: 0696,
+E0697: 0697,
+E0698: 0698,
+E0699: 0699,
+E0700: 0700,
+E0701: 0701,
+E0703: 0703,
+E0704: 0704,
+E0705: 0705,
+E0706: 0706,
+E0708: 0708,
+E0710: 0710,
+E0712: 0712,
+E0713: 0713,
+E0714: 0714,
+E0715: 0715,
+E0716: 0716,
+E0711: 0711,
+E0717: 0717,
+E0718: 0718,
+E0719: 0719,
+E0720: 0720,
+E0722: 0722,
+E0724: 0724,
+E0725: 0725,
+E0726: 0726,
+E0727: 0727,
+E0728: 0728,
+E0729: 0729,
+E0730: 0730,
+E0731: 0731,
+E0732: 0732,
+E0733: 0733,
+E0734: 0734,
+E0735: 0735,
+E0736: 0736,
+E0737: 0737,
+E0739: 0739,
+E0740: 0740,
+E0741: 0741,
+E0742: 0742,
+E0743: 0743,
+E0744: 0744,
+E0745: 0745,
+E0746: 0746,
+E0747: 0747,
+E0748: 0748,
+E0749: 0749,
+E0750: 0750,
+E0751: 0751,
+E0752: 0752,
+E0753: 0753,
+E0754: 0754,
+E0755: 0755,
+E0756: 0756,
+E0757: 0757,
+E0758: 0758,
+E0759: 0759,
+E0760: 0760,
+E0761: 0761,
+E0762: 0762,
+E0763: 0763,
+E0764: 0764,
+E0765: 0765,
+E0766: 0766,
+E0767: 0767,
+E0768: 0768,
+E0769: 0769,
+E0770: 0770,
+E0771: 0771,
+E0772: 0772,
+E0773: 0773,
+E0774: 0774,
+E0775: 0775,
+E0776: 0776,
+E0777: 0777,
+E0778: 0778,
+E0779: 0779,
+E0780: 0780,
+E0781: 0781,
+E0782: 0782,
+E0783: 0783,
+E0784: 0784,
+E0785: 0785,
+E0786: 0786,
+E0787: 0787,
+E0788: 0788,
+E0789: 0789,
+E0790: 0790,
+E0791: 0791,
+E0792: 0792,
+E0793: 0793,
+E0794: 0794,
+E0795: 0795,
+E0796: 0796,
+E0797: 0797,
+        );
     )
 }
 
-mod error_codes;
-pub use error_codes::DIAGNOSTICS;
+// Undocumented removed error codes. Note that many removed error codes are kept in the list above
+// and marked as no-longer emitted with a note in the markdown file (see E0001 for an example).
+//  E0006, // merged with E0005
+//  E0008, // cannot bind by-move into a pattern guard
+//  E0019, // merged into E0015
+//  E0035, // merged into E0087/E0089
+//  E0036, // merged into E0087/E0089
+//  E0068,
+//  E0085,
+//  E0086,
+//  E0101, // replaced with E0282
+//  E0102, // replaced with E0282
+//  E0103,
+//  E0104,
+//  E0122, // bounds in type aliases are ignored, turned into proper lint
+//  E0123,
+//  E0127,
+//  E0129,
+//  E0134,
+//  E0135,
+//  E0141,
+//  E0153, // unused error code
+//  E0157, // unused error code
+//  E0159, // use of trait `{}` as struct constructor
+//  E0163, // merged into E0071
+//  E0167,
+//  E0168,
+//  E0172, // non-trait found in a type sum, moved to resolve
+//  E0173, // manual implementations of unboxed closure traits are experimental
+//  E0174,
+//  E0182, // merged into E0229
+//  E0187, // cannot infer the kind of the closure
+//  E0188, // can not cast an immutable reference to a mutable pointer
+//  E0189, // deprecated: can only cast a boxed pointer to a boxed object
+//  E0190, // deprecated: can only cast a &-pointer to an &-object
+//  E0194, // merged into E0403
+//  E0196, // cannot determine a type for this closure
+//  E0209, // builtin traits can only be implemented on structs or enums
+//  E0213, // associated types are not accepted in this context
+//  E0215, // angle-bracket notation is not stable with `Fn`
+//  E0216, // parenthetical notation is only stable with `Fn`
+//  E0217, // ambiguous associated type, defined in multiple supertraits
+//  E0218, // no associated type defined
+//  E0219, // associated type defined in higher-ranked supertrait
+//  E0233,
+//  E0234,
+//  E0235, // structure constructor specifies a structure of type but
+//  E0236, // no lang item for range syntax
+//  E0237, // no lang item for range syntax
+//  E0238, // parenthesized parameters may only be used with a trait
+//  E0239, // `next` method of `Iterator` trait has unexpected type
+//  E0240,
+//  E0241,
+//  E0242,
+//  E0245, // not a trait
+//  E0246, // invalid recursive type
+//  E0247,
+//  E0248, // value used as a type, now reported earlier during resolution
+//         // as E0412
+//  E0249,
+//  E0257,
+//  E0258,
+//  E0272, // on_unimplemented #0
+//  E0273, // on_unimplemented #1
+//  E0274, // on_unimplemented #2
+//  E0278, // requirement is not satisfied
+//  E0279,
+//  E0280, // changed to ICE
+//  E0285, // overflow evaluation builtin bounds
+//  E0296, // replaced with a generic attribute input check
+//  E0298, // cannot compare constants
+//  E0299, // mismatched types between arms
+//  E0300, // unexpanded macro
+//  E0304, // expected signed integer constant
+//  E0305, // expected constant
+//  E0313, // removed: found unreachable
+//  E0314, // closure outlives stack frame
+//  E0315, // cannot invoke closure outside of its lifetime
+//  E0319, // trait impls for defaulted traits allowed just for structs/enums
+//  E0372, // coherence not object safe
+//  E0385, // {} in an aliasable location
+//  E0402, // cannot use an outer type parameter in this context
+//  E0406, // merged into 420
+//  E0410, // merged into 408
+//  E0413, // merged into 530
+//  E0414, // merged into 530
+//  E0417, // merged into 532
+//  E0418, // merged into 532
+//  E0419, // merged into 531
+//  E0420, // merged into 532
+//  E0421, // merged into 531
+//  E0427, // merged into 530
+//  E0445, // merged into 446 and type privacy lints
+//  E0456, // plugin `..` is not available for triple `..`
+//  E0465, // removed: merged with E0464
+//  E0467, // removed
+//  E0470, // removed
+//  E0471, // constant evaluation error (in pattern)
+//  E0473, // dereference of reference outside its lifetime
+//  E0474, // captured variable `..` does not outlive the enclosing closure
+//  E0475, // index of slice outside its lifetime
+//  E0479, // the type `..` (provided as the value of a type parameter) is...
+//  E0480, // lifetime of method receiver does not outlive the method call
+//  E0481, // lifetime of function argument does not outlive the function call
+//  E0483, // lifetime of operand does not outlive the operation
+//  E0484, // reference is not valid at the time of borrow
+//  E0485, // automatically reference is not valid at the time of borrow
+//  E0486, // type of expression contains references that are not valid during..
+//  E0487, // unsafe use of destructor: destructor might be called while...
+//  E0488, // lifetime of variable does not enclose its declaration
+//  E0489, // type/lifetime parameter not in scope here
+//  E0490, // removed: unreachable
+//  E0526, // shuffle indices are not constant
+//  E0540, // multiple rustc_deprecated attributes
+//  E0548, // replaced with a generic attribute input check
+//  E0553, // multiple rustc_const_unstable attributes
+//  E0555, // replaced with a generic attribute input check
+//  E0558, // replaced with a generic attribute input check
+//  E0563, // cannot determine a type for this `impl Trait` removed in 6383de15
+//  E0564, // only named lifetimes are allowed in `impl Trait`,
+//         // but `{}` was found in the type `{}`
+//  E0598, // lifetime of {} is too short to guarantee its contents can be...
+//  E0611, // merged into E0616
+//  E0612, // merged into E0609
+//  E0613, // Removed (merged with E0609)
+//  E0629, // missing 'feature' (rustc_const_unstable)
+//  E0630, // rustc_const_unstable attribute must be paired with stable/unstable
+//         // attribute
+//  E0645, // trait aliases not finished
+//  E0694, // an unknown tool name found in scoped attributes
+//  E0702, // replaced with a generic attribute input check
+//  E0707, // multiple elided lifetimes used in arguments of `async fn`
+//  E0709, // multiple different lifetimes used in arguments of `async fn`
+//  E0721, // `await` keyword
+//  E0723, // unstable feature in `const` context
+//  E0738, // Removed; errored on `#[track_caller] fn`s in `extern "Rust" { ... }`.
+//  E0744, // merged into E0728