@@ -1417,14 +1417,83 @@ names are effectively reserved. Some significant attributes include:
1417
1417
* The ` lang ` attribute, for custom definitions of traits and functions that are known to the Rust compiler (see [ Language items] ( #language-items ) ).
1418
1418
* The ` link ` attribute, for describing linkage metadata for a crate.
1419
1419
* The ` test ` attribute, for marking functions as unit tests.
1420
- * The ` allow ` , ` warn ` , ` forbid ` , and ` deny ` attributes, for controlling lint checks. Lint checks supported
1421
- by the compiler can be found via ` rustc -W help ` .
1420
+ * The ` allow ` , ` warn ` , ` forbid ` , and ` deny ` attributes, for
1421
+ controlling lint checks (see [ Lint check attributes ] ( #lint-check-attributes ) ) .
1422
1422
* The ` deriving ` attribute, for automatically generating
1423
1423
implementations of certain traits.
1424
1424
* The ` static_assert ` attribute, for asserting that a static bool is true at compiletime
1425
1425
1426
1426
Other attributes may be added or removed during development of the language.
1427
1427
1428
+ ### Lint check attributes
1429
+
1430
+ A lint check names a potentially undesirable coding pattern, such as
1431
+ unreachable code or omitted documentation, for the static entity to
1432
+ which the attribute applies.
1433
+
1434
+ For any lint check ` C ` :
1435
+
1436
+ * ` warn(C) ` warns about violations of ` C ` but continues compilation,
1437
+ * ` deny(C) ` signals an error after encountering a violation of ` C ` ,
1438
+ * ` allow(C) ` overrides the check for ` C ` so that violations will go
1439
+ unreported,
1440
+ * ` forbid(C) ` is the same as ` deny(C) ` , but also forbids uses of
1441
+ ` allow(C) ` within the entity.
1442
+
1443
+ The lint checks supported by the compiler can be found via ` rustc -W help ` ,
1444
+ along with their default settings.
1445
+
1446
+ ~~~ {.xfail-test}
1447
+ mod m1 {
1448
+ // Missing documentation is ignored here
1449
+ #[allow(missing_doc)]
1450
+ pub fn undocumented_one() -> int { 1 }
1451
+
1452
+ // Missing documentation signals a warning here
1453
+ #[warn(missing_doc)]
1454
+ pub fn undocumented_too() -> int { 2 }
1455
+
1456
+ // Missing documentation signals an error here
1457
+ #[deny(missing_doc)]
1458
+ pub fn undocumented_end() -> int { 3 }
1459
+ }
1460
+ ~~~
1461
+
1462
+ This example shows how one can use ` allow ` and ` warn ` to toggle
1463
+ a particular check on and off.
1464
+
1465
+ ~~~
1466
+ #[warn(missing_doc)]
1467
+ mod m2{
1468
+ #[allow(missing_doc)]
1469
+ mod nested {
1470
+ // Missing documentation is ignored here
1471
+ pub fn undocumented_one() -> int { 1 }
1472
+
1473
+ // Missing documentation signals a warning here,
1474
+ // despite the allow above.
1475
+ #[warn(missing_doc)]
1476
+ pub fn undocumented_two() -> int { 2 }
1477
+ }
1478
+
1479
+ // Missing documentation signals a warning here
1480
+ pub fn undocumented_too() -> int { 3 }
1481
+ }
1482
+ ~~~
1483
+
1484
+ This example shows how one can use ` forbid ` to disallow uses
1485
+ of ` allow ` for that lint check.
1486
+
1487
+ ~~~ {.xfail-test}
1488
+ #[forbid(missing_doc)]
1489
+ mod m3 {
1490
+ // Attempting to toggle warning signals an error here
1491
+ #[allow(missing_doc)]
1492
+ /// Returns 2.
1493
+ pub fn undocumented_too() -> int { 2 }
1494
+ }
1495
+ ~~~
1496
+
1428
1497
### Language items
1429
1498
1430
1499
Some primitive Rust operations are defined in Rust code,
0 commit comments