Commit Graph

484 Commits

Author SHA1 Message Date
David Tolnay
46040d0912
Support cxx_name containing name that is Rust keyword 2023-01-07 12:02:52 -08:00
David Tolnay
40bb0d3779
Resolve needless_borrow clippy lint
error: the borrowed expression implements the required traits
      --> syntax/check.rs:91:25
       |
    91 |         cx.error(ident, &msg);
       |                         ^^^^ help: change this to: `msg`
       |
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
       = note: `-D clippy::needless-borrow` implied by `-D clippy::all`
2022-12-29 18:34:05 -08:00
David Tolnay
33432a868d
Provide a suggestion to replace quoted raw identifier 2022-11-08 00:50:54 -08:00
David Tolnay
9f47a6218f
Allow raw identifier outside of quotes only 2022-11-08 00:40:51 -08:00
David Tolnay
8a029059c1
Support raw identifiers in namespace attribute
As in: #[namespace = ::my::company::r#box::implementation]
2022-11-08 00:35:10 -08:00
David Tolnay
152b89b08b
No-std fixes for Box, String, Pin, c_char 2022-10-21 09:18:48 -07:00
David Tolnay
b122cff91d
Allow Vec<bool> to pass syntax check 2022-09-27 17:38:47 -07:00
David Tolnay
30427e0205
Propagate attrs from extern mod onto all contents
#[cxx::bridge]
    mod ffi {
        #[allow(clippy::too_many_arguments)]
        extern "Rust" {
            fn repro(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32, g: i32, h: i32) -> bool;
        }
    }

Before:

    warning: this function has too many arguments (8/7)
     --> src/main.rs:5:12
      |
    5 |         fn repro(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32, g: i32, h: i32) -> bool;
      |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      |
      = note: `#[warn(clippy::too_many_arguments)]` on by default
      = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments

After: no lint.
2022-07-04 09:33:54 -07:00
David Tolnay
e41be2f96b
Begin development on async fn support 2022-01-18 17:58:16 -08:00
David Tolnay
97d7d53c44
Wrap async fn error message 2022-01-18 17:29:01 -08:00
David Tolnay
d58307a1f0
Rename variants_from_header optin to "experimental-enum-variants-from-header"
In preparation for "experimental-async-fn" as a completely orthogonal
experimental feature.
2022-01-18 17:29:01 -08:00
David Tolnay
c1f2176154
Handle module-level cfg attributes 2022-01-18 00:39:25 -08:00
David Tolnay
7bafde28f4
Run cfg evaluator to strip syntax tree 2022-01-17 19:54:54 -08:00
David Tolnay
502022a476
Parse attributes on impl blocks 2022-01-17 19:05:47 -08:00
David Tolnay
2476aff7b2
Store parsed cfg attributes into syntax tree 2022-01-17 18:47:30 -08:00
David Tolnay
b9781f0d03
Add parser for cfg expressions 2022-01-17 14:10:10 -08:00
David Tolnay
5c58322742
Format with rustfmt 1.4.38
Apparently 7fae55596e makes a difference in how rustfmt wants to format this enum.
2022-01-17 13:49:01 -08:00
David Tolnay
7fae55596e
Resolve dead code warnings uncovered by rustc_privacy/rustc_resolve refactor
warning: associated function is never used: `checked_succ`
       --> gen/build/src/syntax/discriminant.rs:183:18
        |
    183 |     pub const fn checked_succ(self) -> Option<Self> {
        |                  ^^^^^^^^^^^^
        |
        = note: `#[warn(dead_code)]` on by default

    warning: associated function is never used: `ty`
       --> gen/build/src/syntax/tokens.rs:305:12
        |
    305 |     pub fn ty(&self) -> ReceiverType {
        |            ^^

    warning: associated function is never used: `ty_self`
       --> gen/build/src/syntax/tokens.rs:310:12
        |
    310 |     pub fn ty_self(&self) -> ReceiverTypeSelf {
        |            ^^^^^^^

    warning: variant is never constructed: `Foreign`
       --> gen/build/src/syntax/mod.rs:122:5
        |
    122 |     Foreign { rust_type: Path },
        |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^

    warning: associated function is never used: `checked_succ`
       --> macro/src/syntax/discriminant.rs:183:18
        |
    183 |     pub const fn checked_succ(self) -> Option<Self> {
        |                  ^^^^^^^^^^^^
        |
        = note: `#[warn(dead_code)]` on by default

    warning: associated function is never used: `is_empty`
      --> macro/src/syntax/doc.rs:22:12
       |
    22 |     pub fn is_empty(&self) -> bool {
       |            ^^^^^^^^

    warning: associated function is never used: `to_string`
      --> macro/src/syntax/doc.rs:26:12
       |
    26 |     pub fn to_string(&self) -> String {
       |            ^^^^^^^^^

    warning: associated function is never used: `remove`
       --> macro/src/syntax/map.rs:127:16
        |
    127 |         pub fn remove<Q>(&mut self, key: &Q) -> Option<V>
        |                ^^^^^^

    warning: associated function is never used: `to_fully_qualified`
      --> macro/src/syntax/names.rs:24:12
       |
    24 |     pub fn to_fully_qualified(&self) -> String {
       |            ^^^^^^^^^^^^^^^^^^

    warning: associated function is never used: `prefix_with`
      --> macro/src/syntax/symbol.rs:44:12
       |
    44 |     pub fn prefix_with(&self, prefix: &str) -> Symbol {
       |            ^^^^^^^^^^^

    warning: variant is never constructed: `Foreign`
       --> macro/src/syntax/mod.rs:122:5
        |
    122 |     Foreign { rust_type: Path },
        |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2022-01-10 18:50:49 -08:00
David Tolnay
def09ab798
Add link to cxx-async repo in async error message 2021-12-12 20:25:28 -08:00
David Tolnay
338636308b
Pass through serde attributes 2021-12-05 19:37:43 -08:00
David Tolnay
0faefeb777
Merge pull request #941 from rookboom/master
Added Serde Serialize/Deserialize traits
2021-10-26 19:50:07 -07:00
Johan Verwey
b3ac95e814
Added Serde Serialize/Deserialize traits 2021-10-26 19:48:43 -07:00
David Tolnay
989ce7db0f
Resolve to_string_in_format_args clippy lint
error: `to_string` applied to a type that implements `Display` in `format!` args
      --> syntax/symbol.rs:45:44
       |
    45 |         Symbol(format!("{}{}", prefix, self.to_string()))
       |                                            ^^^^^^^^^^^^ help: remove this
       |
       = note: `-D clippy::to-string-in-format-args` implied by `-D clippy::all`
       = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args
2021-10-22 19:28:33 -07:00
David Tolnay
9754a725f5
Pass through doc(hidden) attribute 2021-10-05 16:27:08 -04:00
David Tolnay
d9a561cf48
Delete unused span field from ForeignName
warning: field is never read: `span`
      --> macro/src/syntax/names.rs:12:5
       |
    12 |     span: Span,
       |     ^^^^^^^^^^
       |
       = note: `#[warn(dead_code)]` on by default
2021-09-12 05:08:34 -07:00
David Tolnay
c59a4022cd
Avoid inheriting formatter flags in some Display impls
The previous implementation would produce wrong unintentional output
when formatting with alignment or padding, such as {:<15}.
2021-07-29 13:34:55 -07:00
David Tolnay
20cb73ae6f
Support slice of trivial extern type alias 2021-07-23 14:16:46 -07:00
David Tolnay
9b252141c0
Ignore whether variants_from_header attr is outer or inner 2021-04-22 20:35:35 -07:00
David Tolnay
4584958676
Support enum repr types from std::os::raw 2021-04-22 20:04:03 -07:00
David Tolnay
3b58d1c799
Move empty enum check to before filling in variants 2021-04-22 20:04:02 -07:00
David Tolnay
e2250bca87
Parse discriminant values from clang AST 2021-04-22 20:04:02 -07:00
David Tolnay
8a893c79ed
Extract variant info from ast dump 2021-04-22 20:04:02 -07:00
David Tolnay
2b62812419
Store original Attribute of the variants_from_header for spans 2021-04-22 20:04:01 -07:00
David Tolnay
bbf96674a2
Implicltly extern type for enums sourced from header 2021-04-22 20:04:01 -07:00
David Tolnay
2cf2d0c7b2
Preserve item inner attrs 2021-04-22 20:04:01 -07:00
David Tolnay
dd8320320c
Implement variants_from_header checking 2021-04-21 18:23:21 -07:00
David Tolnay
15bf509509
Parse #![variants_from_header] inner attribute 2021-04-21 18:21:56 -07:00
David Tolnay
c5f472ef62
Factor out helper for identifying maybe trivial types 2021-04-16 15:16:19 -07:00
David Tolnay
757f7ff85f
Support inner attributes inside bridge
Example:

    #[cxx::bridge]
    mod ffi {
        #![deny(missing_docs)]

        unsafe extern "C++" {
            include!("example/include/header.h");

            /// wow
            fn f();
        }
    }

    pub use self::ffi::*;
2021-04-13 20:52:25 -07:00
David Tolnay
65b8338411
Add padding around member functions that have documentation 2021-04-13 20:23:19 -07:00
David Tolnay
8a0abfdfb1
Touch up BareFn type parsing 2021-04-10 13:47:40 -07:00
David Tolnay
281d49ac95
Store span of method receiver colon tokens 2021-04-10 13:44:31 -07:00
David Tolnay
f6cad33f31
Store span of function argument colon tokens 2021-04-10 13:42:07 -07:00
David Tolnay
c46b0fa065
Make errors rustc already catches specific to C++ generator 2021-04-08 18:45:16 -07:00
David Tolnay
ef1b70d0db
Diagnostic for invalid lifetime param 'static 2021-04-08 18:45:08 -07:00
David Tolnay
22cb28882a
Recognize mutable slice in return position of a safe function 2021-03-28 04:23:06 -04:00
David Tolnay
ffd6f84833
Recognize mutable slice argument as permitting mutable return 2021-03-28 04:17:56 -04:00
David Tolnay
06ef96fa5f
Handle unrecognized type names in checking signature for mutable return type 2021-03-28 04:07:57 -04:00
David Tolnay
5f5602c2e5
Print type name in type resolver error 2021-03-28 03:58:06 -04:00
David Tolnay
9dab9d8e38
Track the outer type's spans too for implicit impls 2021-03-27 01:51:08 -04:00