Description
I would like to regroup and update the attributes page, and I would like some feedback on how to best improve it. Some of my goals are:
- Every attribute should have a dedicated section somewhere in the reference, making it easy to link to them.
- Every attribute should explain the format of its syntax for its meta input (this is finished in my local branch).
- Every attribute should be documented well enough to understand what it does and how it works.
- Remove the "Crate-only" and "Misc" sections (or at least shrink "misc").
- Ensure all the "Attributes on" sections exist and are complete (Add "Attributes on X" for various places attributes are allowed #355).
- Maybe avoid using attributes.md as a dumping ground for random attributes?
I think the last point may be the most debatable. Right now, to me, it appears as just a giant page that is difficult to navigate. I think it would be good to move the details off to separate pages, and just have an index in attributes.md that links to where to find each one. This is already done for about half the attributes. Unfortunately it's not really clear where some of the other attributes should live.
Here is a preliminary outline of how I think such an index would look, and where the attributes link to.
- Conditional Compilation
cfg
(conditional-compilation.md)cfg_attr
(conditional-compilation.md)
- Testing
test
ignore
should_panic
- Derive
derive
automatically_derived
(currently undocumented)
- Macro-related
macro_use
(FUTURE macros-by-example.md)macro_export
(FUTURE macros-by-example.md)proc_macro
(procedural-macros.md)proc_macro_derive
(procedural-macros.md)proc_macro_attribute
(procedural-macros.md)
- Lint Check
allow
deny
forbid
warn
must_use
- Tool lints
- Linking, Symbols, and FFI
link
(external-blocks.md)link_name
(external-blocks.md???)no_link
(MAYBE extern-crates.md?)repr
(type-layout.md)crate_type
(linkage.md)no_main
no_start
export_name
(abi.md)link_section
(abi.md)no_mangle
(abi.md)used
(abi.md)crate_name
windows_subsystem
- Code Generation
inline
cold
no_builtins
target_feature
(undocumented)
- Compiler Settings
feature
(undocumented)recursion_limit
type_length_limit
(undocumented)
- Documentation
doc
(rustdoc book)
- Preludes
no_std
(crates-and-source-files.md)no_implicit_prelude
(modules.md)
- Deprecation
deprecated
(maybe move this to lints or documentation?)
path
(modules.md)- Runtime
panic_handler
(runtime.md)global_allocator
(??? is this runtime?)
- Tool
I'm thinking maybe just moving some of these to dedicated pages (testing, lints, code generation, etc.)
Any thoughts? Ideas on how to better organize? Does this sound terrible?