Auto merge of #98040 - calebcartwright:sync-rustfmt, r=calebcartwright

Sync rustfmt subtree
This commit is contained in:
bors
2022-06-14 02:17:38 +00:00
90 changed files with 12935 additions and 1250 deletions
+42 -62
View File
@@ -72,7 +72,14 @@ name = "annotate-snippets"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d78ea013094e5ea606b1c05fe35f1dd7ea1eb1ea259908d040b25bd5ec677ee5"
[[package]]
name = "annotate-snippets"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3b9d411ecbaf79885c6df4d75fff75858d5995ff25385657a28af47e82f9c36"
dependencies = [
"unicode-width",
"yansi-term",
]
@@ -614,6 +621,7 @@ checksum = "6d76c22c9b9b215eeb8d016ad3a90417bd13cb24cf8142756e6472445876cab7"
dependencies = [
"atty",
"bitflags",
"clap_derive",
"indexmap",
"lazy_static",
"os_str_bytes",
@@ -631,6 +639,19 @@ dependencies = [
"clap 3.1.1",
]
[[package]]
name = "clap_derive"
version = "3.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c"
dependencies = [
"heck 0.4.0",
"proc-macro-error",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "clippy"
version = "0.1.63"
@@ -1099,11 +1120,10 @@ dependencies = [
[[package]]
name = "dirs"
version = "2.0.2"
version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
dependencies = [
"cfg-if 0.1.10",
"dirs-sys",
]
@@ -1219,19 +1239,6 @@ dependencies = [
"termcolor",
]
[[package]]
name = "env_logger"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
dependencies = [
"atty",
"humantime 2.0.1",
"log",
"regex",
"termcolor",
]
[[package]]
name = "env_logger"
version = "0.9.0"
@@ -1708,6 +1715,12 @@ dependencies = [
"unicode-segmentation",
]
[[package]]
name = "heck"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
[[package]]
name = "hermit-abi"
version = "0.1.19"
@@ -3290,7 +3303,7 @@ dependencies = [
"difference",
"env_logger 0.9.0",
"futures 0.3.19",
"heck",
"heck 0.3.1",
"home",
"itertools",
"jsonrpc-core",
@@ -3500,6 +3513,7 @@ version = "1.0.0"
dependencies = [
"bstr",
"byteorder",
"clap 3.1.1",
"crossbeam-utils",
"libc",
"libz-sys",
@@ -3834,7 +3848,7 @@ dependencies = [
name = "rustc_errors"
version = "0.0.0"
dependencies = [
"annotate-snippets",
"annotate-snippets 0.8.0",
"atty",
"rustc_data_structures",
"rustc_error_messages",
@@ -4085,7 +4099,7 @@ dependencies = [
name = "rustc_macros"
version = "0.1.0"
dependencies = [
"annotate-snippets",
"annotate-snippets 0.8.0",
"fluent-bundle",
"fluent-syntax",
"proc-macro2",
@@ -4687,16 +4701,17 @@ dependencies = [
[[package]]
name = "rustfmt-nightly"
version = "1.4.38"
version = "1.5.0"
dependencies = [
"annotate-snippets",
"annotate-snippets 0.9.1",
"anyhow",
"bytecount",
"cargo_metadata",
"clap 3.1.1",
"derive-new",
"diff",
"dirs",
"env_logger 0.8.4",
"env_logger 0.9.0",
"getopts",
"ignore",
"itertools",
@@ -4707,8 +4722,7 @@ dependencies = [
"rustfmt-config_proc_macro",
"serde",
"serde_json",
"structopt",
"term 0.6.1",
"term",
"thiserror",
"toml",
"unicode-segmentation",
@@ -5096,30 +5110,6 @@ version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "structopt"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40b9788f4202aa75c240ecc9c15c65185e6a39ccdeb0fd5d008b98825464c87c"
dependencies = [
"clap 2.34.0",
"lazy_static",
"structopt-derive",
]
[[package]]
name = "structopt-derive"
version = "0.4.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
dependencies = [
"heck",
"proc-macro-error",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "strum"
version = "0.18.0"
@@ -5132,7 +5122,7 @@ version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c"
dependencies = [
"heck",
"heck 0.3.1",
"proc-macro2",
"quote",
"syn",
@@ -5212,16 +5202,6 @@ dependencies = [
"utf-8",
]
[[package]]
name = "term"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0863a3345e70f61d613eab32ee046ccd1bcc5f9105fe402c61fcd0c13eeb8b5"
dependencies = [
"dirs",
"winapi",
]
[[package]]
name = "term"
version = "0.7.0"
@@ -5276,7 +5256,7 @@ dependencies = [
"getopts",
"libc",
"num_cpus",
"term 0.7.0",
"term",
]
[[package]]
@@ -5705,9 +5685,9 @@ dependencies = [
[[package]]
name = "unicode-segmentation"
version = "1.6.0"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
[[package]]
name = "unicode-width"
@@ -73,6 +73,7 @@ features = [
[dependencies]
bstr = { version = "0.2.13", features = ["default"] }
byteorder = { version = "1", features = ['default', 'std'] }
clap = { version = "3.1.1", features = ["lazy_static", "derive", "clap_derive"]}
curl-sys = { version = "0.4.13", features = ["http2", "libnghttp2-sys"], optional = true }
crossbeam-utils = { version = "0.8.0", features = ["nightly"] }
libc = { version = "0.2.79", features = ["align"] }
+1 -1
View File
@@ -69,7 +69,7 @@ jobs:
steps:
- name: checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
# Run build
- name: install rustup
+1 -1
View File
@@ -26,7 +26,7 @@ jobs:
steps:
- name: checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
# Run build
- name: install rustup
+1 -1
View File
@@ -23,7 +23,7 @@ jobs:
steps:
- name: checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
# Run build
- name: install rustup
+1 -1
View File
@@ -11,7 +11,7 @@ jobs:
name: rustdoc check
steps:
- name: checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: install rustup
run: |
+1 -1
View File
@@ -31,7 +31,7 @@ jobs:
target: x86_64-pc-windows-msvc
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
# Run build
- name: install rustup
+1 -1
View File
@@ -33,7 +33,7 @@ jobs:
- name: disable git eol translation
run: git config --global core.autocrlf false
- name: checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
# Run build
- name: Install Rustup using win.rustup.rs
+74 -1
View File
@@ -2,9 +2,82 @@
## [Unreleased]
## [1.5.0] 2022-06-13
### Changed
- Simplify the rustfmt help text by eliding the full path to the rustfmt binary path from the usage string when running `rustfmt --help` [#5214](https://github.com/rust-lang/rustfmt/issues/5214)
### Fixed
- Fixes issue where wrapped strings would be incorrectly indented in macro defs when `format_strings` was enabled [#4036](https://github.com/rust-lang/rustfmt/issues/4036)
- Remove duplicate imports when `imports_granularity` is set to `Item` [#4725](https://github.com/rust-lang/rustfmt/issues/4725)
- Properly handle stdin input containing an inner skip attribute [#5368](https://github.com/rust-lang/rustfmt/issues/5368)
- Maintain attributes on imports when `imports_granularity` is set to `Item` [#5030](https://github.com/rust-lang/rustfmt/issues/5030)
- Format empty trait definitions as a single line when both `empty_item_single_line` is enabled and `brace_style` is set to `AlwaysNextLine` [#5047](https://github.com/rust-lang/rustfmt/issues/5047)
- Don't change granularity of imports containing comments with `imports_granularity` if doing so could lose or misplace those comments [#5311](https://github.com/rust-lang/rustfmt/pull/5311)
- Prevent rustfmt from removing trailing comments at the end of files annotated with inner `#![rustfmt::skip]` attributes [#5033](https://github.com/rust-lang/rustfmt/issues/5033)
- Fixed various `error[internal]: left behind trailing whitespace"` issues:
- Remove trailing whitespace when formatting a where clause who's bounds have an empty right hand side [#5012](https://github.com/rust-lang/rustfmt/issues/5012) [#4850](https://github.com/rust-lang/rustfmt/issues/4850)
- Prevent rustfmt from adding an empty comment line when rewriting markdown lists at the start of doc comments. This issue was triggered when `wrap_comments=true` [#5088](https://github.com/rust-lang/rustfmt/issues/5088)
- Prevent adding a block indented newline before a function parameter with a complex type that was formatted over multiple lines [#5125](https://github.com/rust-lang/rustfmt/issues/5125)
- Fix various module resolution issues preventing rustfmt from finding modules that should be formatted:
- Handle external mods imported via external->inline load hierarchy [#5063](https://github.com/rust-lang/rustfmt/issues/5063)
- Resolve sub modules of integration tests [#5119](https://github.com/rust-lang/rustfmt/issues/5119)
- Module resolution will fallback to the current search directory if a relative directory search results in a `FileNotFound` error [#5198](https://github.com/rust-lang/rustfmt/issues/5198)
- Give users a clearer error message when resolving a module who's file path is ambiguous (e.g `x.rs` and `x/mod.rs`). Before users were given a `File not found` error message which was confusing [#5167](https://github.com/rust-lang/rustfmt/issues/5167)
- Fix various issues related to type aliases:
- Prevent rustfmt from adding `= impl` to associated types defined in macro bodies [#4823](https://github.com/rust-lang/rustfmt/issues/4823)
- Properly block indent type alias impl traits (TAITs) that wrap to the next line when `version=Two` is set. Before any trait bounds that wrapped to the next line would not be indented [#5027](https://github.com/rust-lang/rustfmt/issues/5027)
- Prevent rustfmt from adding an `impl Trait` definition into types [#5086](https://github.com/rust-lang/rustfmt/issues/5086)
- Fix cases where `normalize_comments=true` would de-normalizes some comments by changing inline comments into block comments [#4909](https://github.com/rust-lang/rustfmt/issues/4909)
- Prevent rustfmt from wrapping the content of markdown [reference-style links](https://www.markdownguide.org/basic-syntax/#reference-style-links) in doc comments [#5095](https://github.com/rust-lang/rustfmt/issues/5095) [#4933](https://github.com/rust-lang/rustfmt/issues/4933)
- Don't format files annotated with inner `#![rustfmt::skip]` attribute [PR #5094](https://github.com/rust-lang/rustfmt/pull/5094)
- Prevent duplicate comma when struct pattern ends with `..` and `trailing_comma=Always`. For example, `let Foo { a, .. } = b;` would become `let Foo { a,, .. } = b;` [#5066](https://github.com/rust-lang/rustfmt/issues/5066)
- Fix the order of `static` and `async` keywords when rewriting static async closures. The correct order is `static` and then `async` (e.g `static async || {}`) [#5149](https://github.com/rust-lang/rustfmt/issues/5149)
- Retain the fully qualified path segment when rewriting struct literals in expression position. Now `<Struct as Trait>::Type` is not rewritten as `Trait::Type` [#5151](https://github.com/rust-lang/rustfmt/issues/5151)
- Do not remove match arm braces from a match arm with a single `ast::ExprKind::Block` that has leading attributes. Removing the braces could lead to code that does not compile. Now rustfmt will leave the outer `{}` in place when formatting `=> {#[allow(unsafe_code)]unsafe {}}` [#4109](https://github.com/rust-lang/rustfmt/issues/4109)
- Backport json emitter and stdin changes [PR #5054](https://github.com/rust-lang/rustfmt/pull/5054)
- Make `--check` work when running rustfmt with input from stdin [PR #3896](https://github.com/rust-lang/rustfmt/pull/3896)
- Fix `--check` with the `--files-with-diff` flag [PR #3910](https://github.com/rust-lang/rustfmt/pull/3910)
- Produce valid JSON when using the JSON emitter [PR #3953](https://github.com/rust-lang/rustfmt/pull/3953)
- Fix newlines in JSON output [PR #4262](https://github.com/rust-lang/rustfmt/pull/4262)
- Use `<stdin>` when emitting stdin as filename [PR #4298](https://github.com/rust-lang/rustfmt/pull/4298)
- Always generate some output when formatting `@generated` files via stdin even when `format_generated_files=false`. Not producing output caused rust-analyzer to delete the file content [rust-lang/rust-analyzer](https://github.com/rust-lang/rust-analyzer/issues/11285) [#5172](https://github.com/rust-lang/rustfmt/issues/5172)
- Properly block indent multi-line comments in empty struct definitions. Previously, only the first comment line would be block indented. All other comment lines would be aligned with the struct definition [#4854](https://github.com/rust-lang/rustfmt/issues/4854)
- Prevent rustfmt from wrapping a comment at a byte position inside a non-ascii character when `wrap_comments=true`. This prevents rustfmt from panicking when breaking on the invalid position [#5023](https://github.com/rust-lang/rustfmt/issues/5023)
- Prevent rustfmt from removing commented out trailing separators (e.g commas) when rewriting lists. For example, remove the comma from a comment like this `// ...,` would lead to a scenario where the entire list could not be rewritten because the content of the comment changed [#5042](https://github.com/rust-lang/rustfmt/issues/5042)
- Fix panic when `import_granularity` was set to `Module`, `One`, or `Crate` and the import use declaration contained an alias `use crate a::b as b1` [#5131](https://github.com/rust-lang/rustfmt/issues/5131)
- Add a newline between generic parameters and their doc comments to prevent the generic parameters from being merged into their doc comments [#5122](https://github.com/rust-lang/rustfmt/issues/5122)
- Fixes indentation issue where string literals manually broken with line continuation characters (`\`) would be incorrectly indented in macro definitions when setting `format_strings=true`[#4036](https://github.com/rust-lang/rustfmt/issues/4036)
- Properly wrap and format long markdown block quotes when `wrap_comments=true` [#5157](https://github.com/rust-lang/rustfmt/issues/5157)
- Prevent rustfmt from wrapping markdown headers even when `wrap_comments=true`. Wrapping the markdown headers would prevent them from being properly rendered with rustdoc [#5238](https://github.com/rust-lang/rustfmt/issues/5238)
- Prevent rustfmt from removing commas between struct fields when those fields were also separated by an empty line [#4791](https://github.com/rust-lang/rustfmt/issues/4791) [#4928](https://github.com/rust-lang/rustfmt/issues/4928)
- Fix compiler error caused when formatting imports with `imports_granularity=Module` and a path containing `self`. Given the following import `use crate::lexer::{self, tokens::TokenData};`, rustfmt would transform the `self` import into `use crate::lexer::self;`. Now rustfmt produces `use crate::lexer::{self};` [#4681](https://github.com/rust-lang/rustfmt/issues/4681)
- Prevent rustfmt from breaking long type links in doc comments on namespace qualifiers (`::`) when `wrap_comments=true`. Breaking these long type links over multiple lines prevented them from being properly rendered in rustdoc [#5260](https://github.com/rust-lang/rustfmt/issues/5260)
- Correctly find the start of struct bodies after any generic `const` parameters. Naively searching for an opening `{` lead to issues since generic `const` parameters are also defined with `{}` (e.g. `struct Example<const N: usize = { 1048576 }> {}`) [#5273](https://github.com/rust-lang/rustfmt/issues/5273)
- Prevent rustfmt from merging derives when using inner or outer `rustfmt::skip::attributes` attributes. For example, `#[rustfmt::skip::attributes(derive)]` [#5270](https://github.com/rust-lang/rustfmt/issues/5270)
- Retain trailing `;` when rewriting macro calls in extern blocks. For example, `extern "C" { x!(-); }`[#5281](https://github.com/rust-lang/rustfmt/issues/5281)
- Add a newline when formatting struct fields preceded by both doc comments and inline comments to prevent the field from being merged into the inline comment. This was not an issue when a struct was preceded by just a doc comment or just an inline comment [#5215](https://github.com/rust-lang/rustfmt/issues/5215)
### Added
- Added `One` as a new [group_imports](https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#group_imports) option to create a single group for all imports [PR #4966](https://github.com/rust-lang/rustfmt/pull/4966)
- Add [short_array_element_width_threshold](https://rust-lang.github.io/rustfmt/?version=v1.4.38&search=#short_array_element_width_threshold) config option to give users more control over when `Mixed` list formatting is used [PR #5228](https://github.com/rust-lang/rustfmt/pull/5228)
### Removed
- Removed unstable, nightly-only config option `report_todo` [#5101](https://github.com/rust-lang/rustfmt/issues/5101)
- Removed unstable, nightly-only config option `report_fixme` [#5102](https://github.com/rust-lang/rustfmt/issues/5102)
- Removed unstable, nightly-only config option `license_template_path` [#5103](https://github.com/rust-lang/rustfmt/issues/5103)
### Misc
- Improved performance when formatting large and deeply nested expression trees, often found in generated code, which have many expressions that exceed `max_width` [#5128](https://github.com/rust-lang/rustfmt/issues/5128), [#4867](https://github.com/rust-lang/rustfmt/issues/4867), [#4476](https://github.com/rust-lang/rustfmt/issues/4476), [#5139](https://github.com/rust-lang/rustfmt/pull/5139)
### Install/Download Options
- **rustup (nightly)** - *pending*
- **GitHub Release Binaries** - [Release v1.5.0](https://github.com/rust-lang/rustfmt/releases/tag/v1.5.0)
- **Build from source** - [Tag v1.5.0](https://github.com/rust-lang/rustfmt/tree/v1.5.0), see instructions for how to [install rustfmt from source][install-from-source]
## [1.4.38] 2021-10-20
+215 -206
View File
@@ -4,64 +4,57 @@ version = 3
[[package]]
name = "aho-corasick"
version = "0.7.6"
version = "0.7.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
dependencies = [
"memchr",
]
[[package]]
name = "annotate-snippets"
version = "0.8.0"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d78ea013094e5ea606b1c05fe35f1dd7ea1eb1ea259908d040b25bd5ec677ee5"
checksum = "c3b9d411ecbaf79885c6df4d75fff75858d5995ff25385657a28af47e82f9c36"
dependencies = [
"unicode-width",
"yansi-term",
]
[[package]]
name = "ansi_term"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
dependencies = [
"winapi",
]
[[package]]
name = "anyhow"
version = "1.0.25"
version = "1.0.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9267dff192e68f3399525901e709a48c1d3982c9c072fa32f2127a0cb0babf14"
checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27"
[[package]]
name = "atty"
version = "0.2.13"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
"hermit-abi",
"libc",
"winapi",
]
[[package]]
name = "autocfg"
version = "1.0.1"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "bitflags"
version = "1.2.1"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bstr"
version = "0.2.8"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d6c2c5b58ab920a4f5aeaaca34b4488074e8cc7596af94e6f8c6ff247c60245"
checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
dependencies = [
"memchr",
]
@@ -77,27 +70,27 @@ dependencies = [
[[package]]
name = "camino"
version = "1.0.5"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52d74260d9bf6944e2208aa46841b4b8f0d7ffc0849a06837b2f510337f86b2b"
checksum = "6f3132262930b0522068049f5870a856ab8affc80c70d08b6ecb785771a6fc23"
dependencies = [
"serde",
]
[[package]]
name = "cargo-platform"
version = "0.1.1"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0226944a63d1bf35a3b5f948dd7c59e263db83695c9e8bffc4037de02e30f1d7"
checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
dependencies = [
"serde",
]
[[package]]
name = "cargo_metadata"
version = "0.14.0"
version = "0.14.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c297bd3135f558552f99a0daa180876984ea2c4ffa7470314540dff8c654109a"
checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
dependencies = [
"camino",
"cargo-platform",
@@ -106,12 +99,6 @@ dependencies = [
"serde_json",
]
[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
name = "cfg-if"
version = "1.0.0"
@@ -120,35 +107,49 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "clap"
version = "2.33.0"
version = "3.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
checksum = "71c47df61d9e16dc010b55dba1952a57d8c215dbb533fd13cdd13369aac73b1c"
dependencies = [
"ansi_term",
"atty",
"bitflags",
"clap_derive",
"indexmap",
"lazy_static",
"os_str_bytes",
"strsim",
"termcolor",
"textwrap",
"unicode-width",
"vec_map",
]
[[package]]
name = "clap_derive"
version = "3.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3aab4734e083b809aaf5794e14e756d1c798d2c69c7f7de7a09a2f5214993c1"
dependencies = [
"heck",
"proc-macro-error",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.3"
version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49"
checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38"
dependencies = [
"autocfg",
"cfg-if 1.0.0",
"cfg-if",
"lazy_static",
]
[[package]]
name = "derive-new"
version = "0.5.8"
version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71f31892cd5c62e414316f2963c5689242c43d8e7bbcaaeca97e5e28c95d91d9"
checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535"
dependencies = [
"proc-macro2",
"quote",
@@ -157,25 +158,45 @@ dependencies = [
[[package]]
name = "diff"
version = "0.1.11"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c2b69f912779fbb121ceb775d74d51e915af17aaebc38d28a592843a2dd0a3a"
checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499"
[[package]]
name = "dirs"
version = "2.0.2"
version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
dependencies = [
"cfg-if 0.1.10",
"dirs-sys",
]
[[package]]
name = "dirs-sys"
version = "0.3.6"
name = "dirs-next"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
dependencies = [
"cfg-if",
"dirs-sys-next",
]
[[package]]
name = "dirs-sys"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
dependencies = [
"libc",
"redox_users",
"winapi",
]
[[package]]
name = "dirs-sys-next"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
dependencies = [
"libc",
"redox_users",
@@ -184,15 +205,15 @@ dependencies = [
[[package]]
name = "either"
version = "1.5.3"
version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
[[package]]
name = "env_logger"
version = "0.8.1"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54532e3223c5af90a6a757c90b5c5521564b07e5e7a958681bcd2afad421cdcd"
checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
dependencies = [
"atty",
"humantime",
@@ -203,9 +224,9 @@ dependencies = [
[[package]]
name = "fnv"
version = "1.0.6"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "getopts"
@@ -218,20 +239,20 @@ dependencies = [
[[package]]
name = "getrandom"
version = "0.2.3"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
dependencies = [
"cfg-if 1.0.0",
"cfg-if",
"libc",
"wasi",
]
[[package]]
name = "globset"
version = "0.4.6"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c152169ef1e421390738366d2f796655fec62621dabbd0fd476f905934061e4a"
checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"
dependencies = [
"aho-corasick",
"bstr",
@@ -241,12 +262,24 @@ dependencies = [
]
[[package]]
name = "heck"
version = "0.3.1"
name = "hashbrown"
version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
[[package]]
name = "heck"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"unicode-segmentation",
"libc",
]
[[package]]
@@ -257,9 +290,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "ignore"
version = "0.4.17"
version = "0.4.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b287fb45c60bb826a0dc68ff08742b9d88a2fea13d6e0c286b3172065aaf878c"
checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
dependencies = [
"crossbeam-utils",
"globset",
@@ -273,6 +306,16 @@ dependencies = [
"winapi-util",
]
[[package]]
name = "indexmap"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee"
dependencies = [
"autocfg",
"hashbrown",
]
[[package]]
name = "itertools"
version = "0.10.3"
@@ -284,9 +327,9 @@ dependencies = [
[[package]]
name = "itoa"
version = "0.4.4"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
[[package]]
name = "lazy_static"
@@ -296,9 +339,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.77"
version = "0.2.122"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2f96b10ec2560088a8e76961b00d47107b3a625fecb76dedb29ee7ccbf98235"
checksum = "ec647867e2bf0772e28c8bcde4f0d19a9216916e890543b5a03ed8ef27b8f259"
[[package]]
name = "libm"
@@ -308,34 +351,49 @@ checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a"
[[package]]
name = "log"
version = "0.4.14"
version = "0.4.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8"
dependencies = [
"cfg-if 1.0.0",
"cfg-if",
]
[[package]]
name = "memchr"
version = "2.2.1"
version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
[[package]]
name = "once_cell"
version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
[[package]]
name = "os_str_bytes"
version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
dependencies = [
"memchr",
]
[[package]]
name = "packed_simd_2"
version = "0.3.4"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3278e0492f961fd4ae70909f56b2723a7e8d01a228427294e19cdfdebda89a17"
checksum = "defdcfef86dcc44ad208f71d9ff4ce28df6537a4e0d6b0e8e845cb8ca10059a6"
dependencies = [
"cfg-if 0.1.10",
"cfg-if",
"libm",
]
[[package]]
name = "proc-macro-error"
version = "0.4.11"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7959c6467d962050d639361f7703b2051c43036d03493c36f01d440fdd3138a"
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
dependencies = [
"proc-macro-error-attr",
"proc-macro2",
@@ -346,71 +404,69 @@ dependencies = [
[[package]]
name = "proc-macro-error-attr"
version = "0.4.11"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4002d9f55991d5e019fb940a90e1a95eb80c24e77cb2462dd4dc869604d543a"
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
dependencies = [
"proc-macro2",
"quote",
"syn",
"syn-mid",
"version_check",
]
[[package]]
name = "proc-macro2"
version = "1.0.26"
version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1"
dependencies = [
"unicode-xid",
]
[[package]]
name = "quote"
version = "1.0.6"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea"
checksum = "632d02bff7f874a36f33ea8bb416cd484b90cc66c1194b1a1110d067a7013f58"
dependencies = [
"proc-macro2",
]
[[package]]
name = "redox_syscall"
version = "0.2.4"
version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570"
checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
dependencies = [
"bitflags",
]
[[package]]
name = "redox_users"
version = "0.4.0"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
dependencies = [
"getrandom",
"redox_syscall",
"thiserror",
]
[[package]]
name = "regex"
version = "1.4.3"
version = "1.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a"
checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
"thread_local",
]
[[package]]
name = "regex-syntax"
version = "0.6.22"
version = "0.6.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581"
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
[[package]]
name = "rustc-workspace-hack"
@@ -429,12 +485,13 @@ dependencies = [
[[package]]
name = "rustfmt-nightly"
version = "1.4.38"
version = "1.5.0"
dependencies = [
"annotate-snippets",
"anyhow",
"bytecount",
"cargo_metadata",
"clap",
"derive-new",
"diff",
"dirs",
@@ -449,7 +506,6 @@ dependencies = [
"rustfmt-config_proc_macro",
"serde",
"serde_json",
"structopt",
"term",
"thiserror",
"toml",
@@ -459,43 +515,49 @@ dependencies = [
]
[[package]]
name = "ryu"
version = "1.0.2"
name = "rustversion"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8"
checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
[[package]]
name = "ryu"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
[[package]]
name = "same-file"
version = "1.0.5"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421"
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
dependencies = [
"winapi-util",
]
[[package]]
name = "semver"
version = "1.0.4"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012"
checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4"
dependencies = [
"serde",
]
[[package]]
name = "serde"
version = "1.0.126"
version = "1.0.136"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03"
checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.126"
version = "1.0.136"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43"
checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
dependencies = [
"proc-macro2",
"quote",
@@ -504,9 +566,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.59"
version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95"
checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
dependencies = [
"itoa",
"ryu",
@@ -515,98 +577,61 @@ dependencies = [
[[package]]
name = "strsim"
version = "0.8.0"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "structopt"
version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fe43617218c0805c6eb37160119dc3c548110a67786da7218d1c6555212f073"
dependencies = [
"clap",
"lazy_static",
"structopt-derive",
]
[[package]]
name = "structopt-derive"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6e79c80e0f4efd86ca960218d4e056249be189ff1c42824dcd9a7f51a56f0bd"
dependencies = [
"heck",
"proc-macro-error",
"proc-macro2",
"quote",
"syn",
]
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "syn"
version = "1.0.65"
version = "1.0.91"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3a1d708c221c5a612956ef9f75b37e454e88d1f7b899fbd3a18d4252012d663"
checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d"
dependencies = [
"proc-macro2",
"quote",
"unicode-xid",
]
[[package]]
name = "syn-mid"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "term"
version = "0.6.1"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0863a3345e70f61d613eab32ee046ccd1bcc5f9105fe402c61fcd0c13eeb8b5"
checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
dependencies = [
"dirs",
"dirs-next",
"rustversion",
"winapi",
]
[[package]]
name = "termcolor"
version = "1.0.5"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96d6098003bde162e4277c70665bd87c326f5a0c3f3fbfb285787fa482d54e6e"
checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
dependencies = [
"wincolor",
"winapi-util",
]
[[package]]
name = "textwrap"
version = "0.11.0"
version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
dependencies = [
"unicode-width",
]
checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
[[package]]
name = "thiserror"
version = "1.0.6"
version = "1.0.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc6b305ec0e323c7b6cfff6098a22516e0063d0bb7c3d88660a890217dca099a"
checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.6"
version = "1.0.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45ba8d810d9c48fc456b7ad54574e8bfb7c7918a57ad7a6e6a0985d7959e8597"
checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
dependencies = [
"proc-macro2",
"quote",
@@ -615,39 +640,39 @@ dependencies = [
[[package]]
name = "thread_local"
version = "1.0.1"
version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
dependencies = [
"lazy_static",
"once_cell",
]
[[package]]
name = "toml"
version = "0.5.3"
version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7aabe75941d914b72bf3e5d3932ed92ce0664d49d8432305a8b547c37227724"
checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
dependencies = [
"serde",
]
[[package]]
name = "unicode-segmentation"
version = "1.3.0"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1967f4cdfc355b37fd76d2a954fb2ed3871034eb4f26d60537d88795cfc332a9"
checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
[[package]]
name = "unicode-width"
version = "0.1.6"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
[[package]]
name = "unicode-xid"
version = "0.2.0"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
[[package]]
name = "unicode_categories"
@@ -655,23 +680,17 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
[[package]]
name = "vec_map"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
[[package]]
name = "version_check"
version = "0.9.1"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "walkdir"
version = "2.2.9"
version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e"
checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
dependencies = [
"same-file",
"winapi",
@@ -686,9 +705,9 @@ checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
[[package]]
name = "winapi"
version = "0.3.8"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
@@ -702,9 +721,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.2"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
dependencies = [
"winapi",
]
@@ -715,16 +734,6 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "wincolor"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96f5016b18804d24db43cebf3c77269e7569b8954a8464501c216cc5e070eaa9"
dependencies = [
"winapi",
"winapi-util",
]
[[package]]
name = "yansi-term"
version = "0.1.2"
+23 -22
View File
@@ -1,7 +1,7 @@
[package]
name = "rustfmt-nightly"
version = "1.4.38"
version = "1.5.0"
description = "Tool to find and fix Rust formatting issues"
repository = "https://github.com/rust-lang/rustfmt"
readme = "README.md"
@@ -33,30 +33,31 @@ rustfmt-format-diff = []
generic-simd = ["bytecount/generic-simd"]
[dependencies]
itertools = "0.10.1"
toml = "0.5"
annotate-snippets = { version = "0.9", features = ["color"] }
anyhow = "1.0"
bytecount = "0.6"
cargo_metadata = "0.14"
clap = { version = "3.1", features = ["derive"] }
derive-new = "0.5"
diff = "0.1"
dirs = "4.0"
env_logger = "0.9"
getopts = "0.2"
ignore = "0.4"
itertools = "0.10"
lazy_static = "1.4"
log = "0.4"
regex = "1.5"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
unicode-segmentation = "1.0.0"
regex = "1.0"
term = "0.6"
diff = "0.1"
log = "0.4.14"
env_logger = "0.8"
getopts = "0.2"
derive-new = "0.5"
cargo_metadata = "0.14"
bytecount = "0.6"
unicode-width = "0.1.5"
unicode_categories = "0.1.1"
dirs = "2.0.1"
ignore = "0.4.17"
annotate-snippets = { version = "0.8", features = ["color"] }
structopt = "0.3"
rustfmt-config_proc_macro = { version = "0.2", path = "config_proc_macro" }
lazy_static = "1.0.0"
anyhow = "1.0"
term = "0.7"
thiserror = "1.0"
toml = "0.5"
unicode-segmentation = "1.9"
unicode-width = "0.1"
unicode_categories = "0.1"
rustfmt-config_proc_macro = { version = "0.2", path = "config_proc_macro" }
# A noop dependency that changes in the Rust repository, it's a bit of a hack.
# See the `src/tools/rustc-workspace-hack/README.md` file in `rust-lang/rust`
+9 -52
View File
@@ -10,7 +10,7 @@ reorder_imports = false
```
Each configuration option is either stable or unstable.
Stable options can be used directly, while unstable options are opt-in.
Stable options can always be used, while unstable options are only available on a nightly toolchain and must be opted into.
To enable unstable options, set `unstable_features = true` in `rustfmt.toml` or pass `--unstable-features` to rustfmt.
# Configuration Options
@@ -1065,7 +1065,7 @@ See also: [`tab_spaces`](#tab_spaces).
Control the case of the letters in hexadecimal literal values
- **Default value**: `Preserve`
- **Possible values**: `Upper`, `Lower`
- **Possible values**: `Preserve`, `Upper`, `Lower`
- **Stable**: No (tracking issue: [#5081](https://github.com/rust-lang/rustfmt/issues/5081))
## `hide_parse_errors`
@@ -1473,26 +1473,6 @@ use core::slice;
#[cfg(feature = "alloc")] use core::slice;
```
## `license_template_path`
Check whether beginnings of files match a license template.
- **Default value**: `""`
- **Possible values**: path to a license template file
- **Stable**: No (tracking issue: [#3352](https://github.com/rust-lang/rustfmt/issues/3352))
A license template is a plain text file which is matched literally against the
beginning of each source file, except for `{}`-delimited blocks, which are
matched as regular expressions. The following license template therefore
matches strings like `// Copyright 2017 The Rust Project Developers.`, `//
Copyright 2018 The Rust Project Developers.`, etc.:
```
// Copyright {\d+} The Rust Project Developers.
```
`\{`, `\}` and `\\` match literal braces / backslashes.
## `match_arm_blocks`
Controls whether arm bodies are wrapped in cases where the first line of the body cannot fit on the same line as the `=>` operator.
@@ -1705,6 +1685,8 @@ How imports should be grouped into `use` statements. Imports will be merged or s
- **Possible values**: `Preserve`, `Crate`, `Module`, `Item`, `One`
- **Stable**: No (tracking issue: [#4991](https://github.com/rust-lang/rustfmt/issues/4991))
Note that rustfmt will not modify the granularity of imports containing comments if doing so could potentially lose or misplace said comments.
#### `Preserve` (default):
Do not change the granularity of any imports and preserve the original structure written by the developer.
@@ -2061,12 +2043,16 @@ use sit;
## `group_imports`
Controls the strategy for how imports are grouped together.
Controls the strategy for how consecutive imports are grouped together.
Controls the strategy for grouping sets of consecutive imports. Imports may contain newlines between imports and still be grouped together as a single set, but other statements between imports will result in different grouping sets.
- **Default value**: `Preserve`
- **Possible values**: `Preserve`, `StdExternalCrate`, `One`
- **Stable**: No (tracking issue: [#5083](https://github.com/rust-lang/rustfmt/issues/5083))
Each set of imports (one or more `use` statements, optionally separated by newlines) will be formatted independently. Other statements such as `mod ...` or `extern crate ...` will cause imports to not be grouped together.
#### `Preserve` (default):
Preserve the source file's import groups.
@@ -2162,35 +2148,6 @@ mod sit;
**Note** `mod` with `#[macro_export]` will not be reordered since that could change the semantics
of the original source code.
## `report_fixme`
Report `FIXME` items in comments.
- **Default value**: `"Never"`
- **Possible values**: `"Always"`, `"Unnumbered"`, `"Never"`
- **Stable**: No (tracking issue: [#3394](https://github.com/rust-lang/rustfmt/issues/3394))
Warns about any comments containing `FIXME` in them when set to `"Always"`. If
it contains a `#X` (with `X` being a number) in parentheses following the
`FIXME`, `"Unnumbered"` will ignore it.
See also [`report_todo`](#report_todo).
## `report_todo`
Report `TODO` items in comments.
- **Default value**: `"Never"`
- **Possible values**: `"Always"`, `"Unnumbered"`, `"Never"`
- **Stable**: No (tracking issue: [#3393](https://github.com/rust-lang/rustfmt/issues/3393))
Warns about any comments containing `TODO` in them when set to `"Always"`. If
it contains a `#X` (with `X` being a number) in parentheses following the
`TODO`, `"Unnumbered"` will ignore it.
See also [`report_fixme`](#report_fixme).
## `required_version`
Require a specific version of rustfmt. If you want to make sure that the
+1 -1
View File
@@ -1,3 +1,3 @@
[toolchain]
channel = "nightly-2022-03-27"
channel = "nightly-2022-06-06"
components = ["rustc-dev"]
+19 -15
View File
@@ -10,59 +10,63 @@
use std::fs;
use std::hash::{Hash, Hasher};
use std::io::{self, Write};
use std::iter::FromIterator;
use std::path::{Path, PathBuf};
use std::process::Command;
use std::str;
use structopt::StructOpt;
use clap::{CommandFactory, Parser};
#[path = "test/mod.rs"]
#[cfg(test)]
mod cargo_fmt_tests;
#[derive(StructOpt, Debug)]
#[structopt(
#[derive(Parser)]
#[clap(
bin_name = "cargo fmt",
about = "This utility formats all bin and lib files of \
the current crate using rustfmt."
)]
pub struct Opts {
/// No output printed to stdout
#[structopt(short = "q", long = "quiet")]
#[clap(short = 'q', long = "quiet")]
quiet: bool,
/// Use verbose output
#[structopt(short = "v", long = "verbose")]
#[clap(short = 'v', long = "verbose")]
verbose: bool,
/// Print rustfmt version and exit
#[structopt(long = "version")]
#[clap(long = "version")]
version: bool,
/// Specify package to format
#[structopt(short = "p", long = "package", value_name = "package")]
#[clap(
short = 'p',
long = "package",
value_name = "package",
multiple_values = true
)]
packages: Vec<String>,
/// Specify path to Cargo.toml
#[structopt(long = "manifest-path", value_name = "manifest-path")]
#[clap(long = "manifest-path", value_name = "manifest-path")]
manifest_path: Option<String>,
/// Specify message-format: short|json|human
#[structopt(long = "message-format", value_name = "message-format")]
#[clap(long = "message-format", value_name = "message-format")]
message_format: Option<String>,
/// Options passed to rustfmt
// 'raw = true' to make `--` explicit.
#[structopt(name = "rustfmt_options", raw(true))]
#[clap(name = "rustfmt_options", raw(true))]
rustfmt_options: Vec<String>,
/// Format all packages, and also their local path-based dependencies
#[structopt(long = "all")]
#[clap(long = "all")]
format_all: bool,
/// Run rustfmt in check mode
#[structopt(long = "check")]
#[clap(long = "check")]
check: bool,
}
@@ -87,7 +91,7 @@ fn execute() -> i32 {
}
});
let opts = Opts::from_iter(args);
let opts = Opts::parse_from(args);
let verbosity = match (opts.verbose, opts.quiet) {
(false, false) => Verbosity::Normal,
@@ -204,7 +208,7 @@ fn convert_message_format_to_rustfmt_args(
fn print_usage_to_stderr(reason: &str) {
eprintln!("{}", reason);
let app = Opts::clap();
let app = Opts::command();
app.after_help("")
.write_help(&mut io::stderr())
.expect("failed to write to stderr");
+23 -19
View File
@@ -6,7 +6,7 @@
#[test]
fn default_options() {
let empty: Vec<String> = vec![];
let o = Opts::from_iter(&empty);
let o = Opts::parse_from(&empty);
assert_eq!(false, o.quiet);
assert_eq!(false, o.verbose);
assert_eq!(false, o.version);
@@ -20,7 +20,7 @@ fn default_options() {
#[test]
fn good_options() {
let o = Opts::from_iter(&[
let o = Opts::parse_from(&[
"test",
"-q",
"-p",
@@ -47,8 +47,8 @@ fn good_options() {
#[test]
fn unexpected_option() {
assert!(
Opts::clap()
.get_matches_from_safe(&["test", "unexpected"])
Opts::command()
.try_get_matches_from(&["test", "unexpected"])
.is_err()
);
}
@@ -56,8 +56,8 @@ fn unexpected_option() {
#[test]
fn unexpected_flag() {
assert!(
Opts::clap()
.get_matches_from_safe(&["test", "--flag"])
Opts::command()
.try_get_matches_from(&["test", "--flag"])
.is_err()
);
}
@@ -65,20 +65,20 @@ fn unexpected_flag() {
#[test]
fn mandatory_separator() {
assert!(
Opts::clap()
.get_matches_from_safe(&["test", "--emit"])
Opts::command()
.try_get_matches_from(&["test", "--emit"])
.is_err()
);
assert!(
!Opts::clap()
.get_matches_from_safe(&["test", "--", "--emit"])
!Opts::command()
.try_get_matches_from(&["test", "--", "--emit"])
.is_err()
);
}
#[test]
fn multiple_packages_one_by_one() {
let o = Opts::from_iter(&[
let o = Opts::parse_from(&[
"test",
"-p",
"package1",
@@ -92,7 +92,7 @@ fn multiple_packages_one_by_one() {
#[test]
fn multiple_packages_grouped() {
let o = Opts::from_iter(&[
let o = Opts::parse_from(&[
"test",
"--package",
"package1",
@@ -106,14 +106,18 @@ fn multiple_packages_grouped() {
#[test]
fn empty_packages_1() {
assert!(Opts::clap().get_matches_from_safe(&["test", "-p"]).is_err());
assert!(
Opts::command()
.try_get_matches_from(&["test", "-p"])
.is_err()
);
}
#[test]
fn empty_packages_2() {
assert!(
Opts::clap()
.get_matches_from_safe(&["test", "-p", "--", "--check"])
Opts::command()
.try_get_matches_from(&["test", "-p", "--", "--check"])
.is_err()
);
}
@@ -121,8 +125,8 @@ fn empty_packages_2() {
#[test]
fn empty_packages_3() {
assert!(
Opts::clap()
.get_matches_from_safe(&["test", "-p", "--verbose"])
Opts::command()
.try_get_matches_from(&["test", "-p", "--verbose"])
.is_err()
);
}
@@ -130,8 +134,8 @@ fn empty_packages_3() {
#[test]
fn empty_packages_4() {
assert!(
Opts::clap()
.get_matches_from_safe(&["test", "-p", "--check"])
Opts::command()
.try_get_matches_from(&["test", "-p", "--check"])
.is_err()
);
}
+1 -1
View File
@@ -796,7 +796,7 @@ fn handle_line(
// 1) wrap_comments = true is configured
// 2) The comment is not the start of a markdown header doc comment
// 3) The comment width exceeds the shape's width
// 4) No URLS were found in the commnet
// 4) No URLS were found in the comment
let should_wrap_comment = self.fmt.config.wrap_comments()
&& !is_markdown_header_doc_comment
&& unicode_str_width(line) > self.fmt.shape.width
@@ -61,9 +61,6 @@ macro_rules! create_config {
#[derive(Clone)]
#[allow(unreachable_pub)]
pub struct Config {
// if a license_template_path has been specified, successfully read, parsed and compiled
// into a regex, it will be stored here
pub license_template: Option<Regex>,
// For each config item, we store a bool indicating whether it has
// been accessed and the value, and a bool whether the option was
// manually initialised, or taken from the default,
@@ -104,7 +101,6 @@ pub fn $i(&mut self, value: $ty) {
| "struct_variant_width"
| "array_width"
| "chain_width" => self.0.set_heuristics(),
"license_template_path" => self.0.set_license_template(),
"merge_imports" => self.0.set_merge_imports(),
&_ => (),
}
@@ -163,7 +159,6 @@ fn fill_from_parsed_config(mut self, parsed: PartialConfig, dir: &Path) -> Confi
}
)+
self.set_heuristics();
self.set_license_template();
self.set_ignore(dir);
self.set_merge_imports();
self
@@ -247,7 +242,6 @@ pub fn override_value(&mut self, key: &str, val: &str)
| "struct_variant_width"
| "array_width"
| "chain_width" => self.set_heuristics(),
"license_template_path" => self.set_license_template(),
"merge_imports" => self.set_merge_imports(),
&_ => (),
}
@@ -386,21 +380,6 @@ fn set_heuristics(&mut self) {
};
}
fn set_license_template(&mut self) {
if self.was_set().license_template_path() {
let lt_path = self.license_template_path();
if lt_path.len() > 0 {
match license::load_and_compile_template(&lt_path) {
Ok(re) => self.license_template = Some(re),
Err(msg) => eprintln!("Warning for license template file {:?}: {}",
lt_path, msg),
}
} else {
self.license_template = None;
}
}
}
fn set_ignore(&mut self, dir: &Path) {
self.ignore.2.add_prefix(dir);
}
@@ -437,7 +416,6 @@ pub fn is_default(&self, key: &str) -> bool {
impl Default for Config {
fn default() -> Config {
Config {
license_template: None,
$(
$i: (Cell::new(false), false, $def, $stb),
)+
-265
View File
@@ -1,265 +0,0 @@
use std::fmt;
use std::fs::File;
use std::io;
use std::io::Read;
use regex::Regex;
#[derive(Debug)]
pub(crate) enum LicenseError {
IO(io::Error),
Regex(regex::Error),
Parse(String),
}
impl fmt::Display for LicenseError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match *self {
LicenseError::IO(ref err) => err.fmt(f),
LicenseError::Regex(ref err) => err.fmt(f),
LicenseError::Parse(ref err) => write!(f, "parsing failed, {}", err),
}
}
}
impl From<io::Error> for LicenseError {
fn from(err: io::Error) -> LicenseError {
LicenseError::IO(err)
}
}
impl From<regex::Error> for LicenseError {
fn from(err: regex::Error) -> LicenseError {
LicenseError::Regex(err)
}
}
// the template is parsed using a state machine
enum ParsingState {
Lit,
LitEsc,
// the u32 keeps track of brace nesting
Re(u32),
ReEsc(u32),
Abort(String),
}
use self::ParsingState::*;
pub(crate) struct TemplateParser {
parsed: String,
buffer: String,
state: ParsingState,
linum: u32,
open_brace_line: u32,
}
impl TemplateParser {
fn new() -> Self {
Self {
parsed: "^".to_owned(),
buffer: String::new(),
state: Lit,
linum: 1,
// keeps track of last line on which a regex placeholder was started
open_brace_line: 0,
}
}
/// Converts a license template into a string which can be turned into a regex.
///
/// The license template could use regex syntax directly, but that would require a lot of manual
/// escaping, which is inconvenient. It is therefore literal by default, with optional regex
/// subparts delimited by `{` and `}`. Additionally:
///
/// - to insert literal `{`, `}` or `\`, escape it with `\`
/// - an empty regex placeholder (`{}`) is shorthand for `{.*?}`
///
/// This function parses this input format and builds a properly escaped *string* representation
/// of the equivalent regular expression. It **does not** however guarantee that the returned
/// string is a syntactically valid regular expression.
///
/// # Examples
///
/// ```text
/// assert_eq!(
/// TemplateParser::parse(
/// r"
/// // Copyright {\d+} The \} Rust \\ Project \{ Developers. See the {([A-Z]+)}
/// // file at the top-level directory of this distribution and at
/// // {}.
/// //
/// // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
/// // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
/// // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
/// // option. This file may not be copied, modified, or distributed
/// // except according to those terms.
/// "
/// ).unwrap(),
/// r"^
/// // Copyright \d+ The \} Rust \\ Project \{ Developers\. See the ([A-Z]+)
/// // file at the top\-level directory of this distribution and at
/// // .*?\.
/// //
/// // Licensed under the Apache License, Version 2\.0 <LICENSE\-APACHE or
/// // http://www\.apache\.org/licenses/LICENSE\-2\.0> or the MIT license
/// // <LICENSE\-MIT or http://opensource\.org/licenses/MIT>, at your
/// // option\. This file may not be copied, modified, or distributed
/// // except according to those terms\.
/// "
/// );
/// ```
pub(crate) fn parse(template: &str) -> Result<String, LicenseError> {
let mut parser = Self::new();
for chr in template.chars() {
if chr == '\n' {
parser.linum += 1;
}
parser.state = match parser.state {
Lit => parser.trans_from_lit(chr),
LitEsc => parser.trans_from_litesc(chr),
Re(brace_nesting) => parser.trans_from_re(chr, brace_nesting),
ReEsc(brace_nesting) => parser.trans_from_reesc(chr, brace_nesting),
Abort(msg) => return Err(LicenseError::Parse(msg)),
};
}
// check if we've ended parsing in a valid state
match parser.state {
Abort(msg) => return Err(LicenseError::Parse(msg)),
Re(_) | ReEsc(_) => {
return Err(LicenseError::Parse(format!(
"escape or balance opening brace on l. {}",
parser.open_brace_line
)));
}
LitEsc => {
return Err(LicenseError::Parse(format!(
"incomplete escape sequence on l. {}",
parser.linum
)));
}
_ => (),
}
parser.parsed.push_str(&regex::escape(&parser.buffer));
Ok(parser.parsed)
}
fn trans_from_lit(&mut self, chr: char) -> ParsingState {
match chr {
'{' => {
self.parsed.push_str(&regex::escape(&self.buffer));
self.buffer.clear();
self.open_brace_line = self.linum;
Re(1)
}
'}' => Abort(format!(
"escape or balance closing brace on l. {}",
self.linum
)),
'\\' => LitEsc,
_ => {
self.buffer.push(chr);
Lit
}
}
}
fn trans_from_litesc(&mut self, chr: char) -> ParsingState {
self.buffer.push(chr);
Lit
}
fn trans_from_re(&mut self, chr: char, brace_nesting: u32) -> ParsingState {
match chr {
'{' => {
self.buffer.push(chr);
Re(brace_nesting + 1)
}
'}' => {
match brace_nesting {
1 => {
// default regex for empty placeholder {}
if self.buffer.is_empty() {
self.parsed.push_str(".*?");
} else {
self.parsed.push_str(&self.buffer);
}
self.buffer.clear();
Lit
}
_ => {
self.buffer.push(chr);
Re(brace_nesting - 1)
}
}
}
'\\' => {
self.buffer.push(chr);
ReEsc(brace_nesting)
}
_ => {
self.buffer.push(chr);
Re(brace_nesting)
}
}
}
fn trans_from_reesc(&mut self, chr: char, brace_nesting: u32) -> ParsingState {
self.buffer.push(chr);
Re(brace_nesting)
}
}
pub(crate) fn load_and_compile_template(path: &str) -> Result<Regex, LicenseError> {
let mut lt_file = File::open(&path)?;
let mut lt_str = String::new();
lt_file.read_to_string(&mut lt_str)?;
let lt_parsed = TemplateParser::parse(&lt_str)?;
Ok(Regex::new(&lt_parsed)?)
}
#[cfg(test)]
mod test {
use super::TemplateParser;
#[test]
fn test_parse_license_template() {
assert_eq!(
TemplateParser::parse("literal (.*)").unwrap(),
r"^literal \(\.\*\)"
);
assert_eq!(
TemplateParser::parse(r"escaping \}").unwrap(),
r"^escaping \}"
);
assert!(TemplateParser::parse("unbalanced } without escape").is_err());
assert_eq!(
TemplateParser::parse(r"{\d+} place{-?}holder{s?}").unwrap(),
r"^\d+ place-?holders?"
);
assert_eq!(TemplateParser::parse("default {}").unwrap(), "^default .*?");
assert_eq!(
TemplateParser::parse(r"unbalanced nested braces {\{{3}}").unwrap(),
r"^unbalanced nested braces \{{3}"
);
assert_eq!(
&TemplateParser::parse("parsing error }")
.unwrap_err()
.to_string(),
"parsing failed, escape or balance closing brace on l. 1"
);
assert_eq!(
&TemplateParser::parse("parsing error {\nsecond line")
.unwrap_err()
.to_string(),
"parsing failed, escape or balance opening brace on l. 1"
);
assert_eq!(
&TemplateParser::parse(r"parsing error \")
.unwrap_err()
.to_string(),
"parsing failed, incomplete escape sequence on l. 1"
);
}
}
-38
View File
@@ -5,7 +5,6 @@
use std::path::{Path, PathBuf};
use std::{env, fs};
use regex::Regex;
use thiserror::Error;
use crate::config::config_type::ConfigType;
@@ -22,7 +21,6 @@
pub(crate) mod options;
pub(crate) mod file_lines;
pub(crate) mod license;
pub(crate) mod lists;
// This macro defines configuration options used in rustfmt. Each option
@@ -63,8 +61,6 @@
"Maximum length of comments. No effect unless wrap_comments = true";
normalize_comments: bool, false, false, "Convert /* */ comments to // comments where possible";
normalize_doc_attributes: bool, false, false, "Normalize doc attributes as doc comments";
license_template_path: String, String::default(), false,
"Beginning of file must match license template";
format_strings: bool, false, false, "Format string literals where necessary";
format_macro_matchers: bool, false, false,
"Format the metavariable matching patterns in macros";
@@ -164,10 +160,6 @@
error_on_unformatted: bool, false, false,
"Error if unable to get comments or string literals within max_width, \
or they are left with trailing whitespaces";
report_todo: ReportTactic, ReportTactic::Never, false,
"Report all, none or unnumbered occurrences of TODO in source file comments";
report_fixme: ReportTactic, ReportTactic::Never, false,
"Report all, none or unnumbered occurrences of FIXME in source file comments";
ignore: IgnoreList, IgnoreList::default(), false,
"Skip formatting the specified files and directories";
@@ -418,8 +410,6 @@ mod mock {
create_config! {
// Options that are used by the generated functions
max_width: usize, 100, true, "Maximum width of each line";
license_template_path: String, String::default(), false,
"Beginning of file must match license template";
required_version: String, env!("CARGO_PKG_VERSION").to_owned(), false,
"Require a specific version of rustfmt.";
ignore: IgnoreList, IgnoreList::default(), false,
@@ -524,31 +514,6 @@ fn test_print_docs_include_unstable() {
assert_eq!(s.contains("(unstable)"), true);
}
#[test]
fn test_empty_string_license_template_path() {
let toml = r#"license_template_path = """#;
let config = Config::from_toml(toml, Path::new("")).unwrap();
assert!(config.license_template.is_none());
}
#[nightly_only_test]
#[test]
fn test_valid_license_template_path() {
let toml = r#"license_template_path = "tests/license-template/lt.txt""#;
let config = Config::from_toml(toml, Path::new("")).unwrap();
assert!(config.license_template.is_some());
}
#[nightly_only_test]
#[test]
fn test_override_existing_license_with_no_license() {
let toml = r#"license_template_path = "tests/license-template/lt.txt""#;
let mut config = Config::from_toml(toml, Path::new("")).unwrap();
assert!(config.license_template.is_some());
config.override_value("license_template_path", "");
assert!(config.license_template.is_none());
}
#[test]
fn test_dump_default_config() {
let default_config = format!(
@@ -570,7 +535,6 @@ fn test_dump_default_config() {
comment_width = 80
normalize_comments = false
normalize_doc_attributes = false
license_template_path = ""
format_strings = false
format_macro_matchers = false
format_macro_bodies = true
@@ -625,8 +589,6 @@ fn test_dump_default_config() {
hide_parse_errors = false
error_on_line_overflow = false
error_on_unformatted = false
report_todo = "Never"
report_fixme = "Never"
ignore = []
emit_mode = "Files"
make_backup = false
+50 -1
View File
@@ -1,5 +1,6 @@
use std::borrow::Cow;
use std::cmp::min;
use std::collections::HashMap;
use itertools::Itertools;
use rustc_ast::token::{Delimiter, LitKind};
@@ -22,7 +23,7 @@
use crate::matches::rewrite_match;
use crate::overflow::{self, IntoOverflowableItem, OverflowableItem};
use crate::pairs::{rewrite_all_pairs, rewrite_pair, PairParts};
use crate::rewrite::{Rewrite, RewriteContext};
use crate::rewrite::{QueryId, Rewrite, RewriteContext};
use crate::shape::{Indent, Shape};
use crate::source_map::{LineRangeUtils, SpanUtils};
use crate::spanned::Spanned;
@@ -53,6 +54,54 @@ pub(crate) fn format_expr(
expr_type: ExprType,
context: &RewriteContext<'_>,
shape: Shape,
) -> Option<String> {
// when max_width is tight, we should check all possible formattings, in order to find
// if we can fit expression in the limit. Doing it recursively takes exponential time
// relative to input size, and people hit it with rustfmt takes minutes in #4476 #4867 #5128
// By memoization of format_expr function, we format each pair of expression and shape
// only once, so worst case execution time becomes O(n*max_width^3).
if context.inside_macro() || context.is_macro_def {
// span ids are not unique in macros, so we don't memoize result of them.
return format_expr_inner(expr, expr_type, context, shape);
}
let clean;
let query_id = QueryId {
shape,
span: expr.span,
};
if let Some(map) = context.memoize.take() {
if let Some(r) = map.get(&query_id) {
let r = r.clone();
context.memoize.set(Some(map)); // restore map in the memoize cell for other users
return r;
}
context.memoize.set(Some(map));
clean = false;
} else {
context.memoize.set(Some(HashMap::default()));
clean = true; // We got None, so we are the top level called function. When
// this function finishes, no one is interested in what is in the map, because
// all of them are sub expressions of this top level expression, and this is
// done. So we should clean up memoize map to save some memory.
}
let r = format_expr_inner(expr, expr_type, context, shape);
if clean {
context.memoize.set(None);
} else {
if let Some(mut map) = context.memoize.take() {
map.insert(query_id, r.clone()); // insert the result in the memoize map
context.memoize.set(Some(map)); // so it won't be computed again
}
}
r
}
fn format_expr_inner(
expr: &ast::Expr,
expr_type: ExprType,
context: &RewriteContext<'_>,
shape: Shape,
) -> Option<String> {
skip_out_of_file_lines_range!(context, expr.span);
+23 -22
View File
@@ -19,8 +19,7 @@
use regex::Regex;
use structopt::clap::AppSettings;
use structopt::StructOpt;
use clap::{CommandFactory, Parser};
/// The default pattern of files to format.
///
@@ -37,16 +36,16 @@ enum FormatDiffError {
IoError(#[from] io::Error),
}
#[derive(StructOpt, Debug)]
#[structopt(
#[derive(Parser, Debug)]
#[clap(
name = "rustfmt-format-diff",
setting = AppSettings::DisableVersion,
setting = AppSettings::NextLineHelp
disable_version_flag = true,
next_line_help = true
)]
pub struct Opts {
/// Skip the smallest prefix containing NUMBER slashes
#[structopt(
short = "p",
#[clap(
short = 'p',
long = "skip-prefix",
value_name = "NUMBER",
default_value = "0"
@@ -54,8 +53,8 @@ pub struct Opts {
skip_prefix: u32,
/// Custom pattern selecting file paths to reformat
#[structopt(
short = "f",
#[clap(
short = 'f',
long = "filter",
value_name = "PATTERN",
default_value = DEFAULT_PATTERN
@@ -65,10 +64,12 @@ pub struct Opts {
fn main() {
env_logger::Builder::from_env("RUSTFMT_LOG").init();
let opts = Opts::from_args();
let opts = Opts::parse();
if let Err(e) = run(opts) {
println!("{}", e);
Opts::clap().print_help().expect("cannot write to stdout");
Opts::command()
.print_help()
.expect("cannot write to stdout");
process::exit(1);
}
}
@@ -230,14 +231,14 @@ mod cmd_line_tests {
#[test]
fn default_options() {
let empty: Vec<String> = vec![];
let o = Opts::from_iter(&empty);
let o = Opts::parse_from(&empty);
assert_eq!(DEFAULT_PATTERN, o.filter);
assert_eq!(0, o.skip_prefix);
}
#[test]
fn good_options() {
let o = Opts::from_iter(&["test", "-p", "10", "-f", r".*\.hs"]);
let o = Opts::parse_from(&["test", "-p", "10", "-f", r".*\.hs"]);
assert_eq!(r".*\.hs", o.filter);
assert_eq!(10, o.skip_prefix);
}
@@ -245,8 +246,8 @@ fn good_options() {
#[test]
fn unexpected_option() {
assert!(
Opts::clap()
.get_matches_from_safe(&["test", "unexpected"])
Opts::command()
.try_get_matches_from(&["test", "unexpected"])
.is_err()
);
}
@@ -254,8 +255,8 @@ fn unexpected_option() {
#[test]
fn unexpected_flag() {
assert!(
Opts::clap()
.get_matches_from_safe(&["test", "--flag"])
Opts::command()
.try_get_matches_from(&["test", "--flag"])
.is_err()
);
}
@@ -263,8 +264,8 @@ fn unexpected_flag() {
#[test]
fn overridden_option() {
assert!(
Opts::clap()
.get_matches_from_safe(&["test", "-p", "10", "-p", "20"])
Opts::command()
.try_get_matches_from(&["test", "-p", "10", "-p", "20"])
.is_err()
);
}
@@ -272,8 +273,8 @@ fn overridden_option() {
#[test]
fn negative_filter() {
assert!(
Opts::clap()
.get_matches_from_safe(&["test", "-p", "-1"])
Opts::command()
.try_get_matches_from(&["test", "-p", "-1"])
.is_err()
);
}
@@ -142,10 +142,9 @@ fn error_kind_to_snippet_annotation_type(error_kind: &ErrorKind) -> AnnotationTy
| ErrorKind::ModuleResolutionError(_)
| ErrorKind::ParseError
| ErrorKind::LostComment
| ErrorKind::LicenseCheck
| ErrorKind::BadAttr
| ErrorKind::InvalidGlobPattern(_)
| ErrorKind::VersionMismatch => AnnotationType::Error,
ErrorKind::BadIssue(_) | ErrorKind::DeprecatedAttr => AnnotationType::Warning,
ErrorKind::DeprecatedAttr => AnnotationType::Warning,
}
}
+25 -39
View File
@@ -2,6 +2,7 @@
use std::collections::HashMap;
use std::io::{self, Write};
use std::rc::Rc;
use std::time::{Duration, Instant};
use rustc_ast::ast;
@@ -11,7 +12,6 @@
use crate::comment::{CharClasses, FullCodeCharKind};
use crate::config::{Config, FileName, Verbosity};
use crate::formatting::generated::is_generated_file;
use crate::issues::BadIssueSeeker;
use crate::modules::Module;
use crate::parse::parser::{DirectoryOwnership, Parser, ParserError};
use crate::parse::session::ParseSess;
@@ -39,12 +39,10 @@ pub(crate) fn format_input_inner(
rustc_span::create_session_if_not_set_then(self.config.edition().into(), |_| {
if self.config.disable_all_formatting() {
// When the input is from stdin, echo back the input.
if let Input::Text(ref buf) = input {
if let Err(e) = io::stdout().write_all(buf.as_bytes()) {
return Err(From::from(e));
}
}
return Ok(FormatReport::new());
return match input {
Input::Text(ref buf) => echo_back_stdin(buf),
_ => Ok(FormatReport::new()),
};
}
let config = &self.config.clone();
@@ -93,6 +91,13 @@ fn should_skip_module<T: FormatHandler>(
false
}
fn echo_back_stdin(input: &str) -> Result<FormatReport, ErrorKind> {
if let Err(e) = io::stdout().write_all(input.as_bytes()) {
return Err(From::from(e));
}
Ok(FormatReport::new())
}
// Format an entire crate (or subset of the module tree).
fn format_project<T: FormatHandler>(
input: Input,
@@ -135,7 +140,8 @@ fn format_project<T: FormatHandler>(
.visit_crate(&krate)?
.into_iter()
.filter(|(path, module)| {
!should_skip_module(config, &context, input_is_stdin, &main_file, path, module)
input_is_stdin
|| !should_skip_module(config, &context, input_is_stdin, &main_file, path, module)
})
.collect::<Vec<_>>();
@@ -145,6 +151,14 @@ fn format_project<T: FormatHandler>(
context.parse_session.set_silent_emitter();
for (path, module) in files {
if input_is_stdin && contains_skip(module.attrs()) {
return echo_back_stdin(
context
.parse_session
.snippet_provider(module.span)
.entire_snippet(),
);
}
should_emit_verbose(input_is_stdin, config, || println!("Formatting {}", path));
context.format_file(path, &module, is_macro_def)?;
}
@@ -189,6 +203,7 @@ fn format_file(
self.config,
&snippet_provider,
self.report.clone(),
Rc::default(),
);
visitor.skip_context.update_with_attrs(&self.krate.attrs);
visitor.is_macro_def = is_macro_def;
@@ -329,10 +344,8 @@ pub(crate) fn format_len(&self) -> (usize, usize) {
ErrorKind::LineOverflow(found, max) => (max, found - max),
ErrorKind::TrailingWhitespace
| ErrorKind::DeprecatedAttr
| ErrorKind::BadIssue(_)
| ErrorKind::BadAttr
| ErrorKind::LostComment
| ErrorKind::LicenseCheck => {
| ErrorKind::LostComment => {
let trailing_ws_start = self
.line_buffer
.rfind(|c: char| !c.is_whitespace())
@@ -364,7 +377,7 @@ pub(crate) struct ReportedErrors {
// Code contains macro call that was unable to format.
pub(crate) has_macro_format_failure: bool,
// Failed a check, such as the license check or other opt-in checking.
// Failed an opt-in checking.
pub(crate) has_check_errors: bool,
/// Formatted code differs from existing code (--check only).
@@ -460,7 +473,6 @@ fn format_lines(
report: &FormatReport,
) {
let mut formatter = FormatLines::new(name, skipped_range, config);
formatter.check_license(text);
formatter.iterate(text);
if formatter.newline_count > 1 {
@@ -480,11 +492,9 @@ struct FormatLines<'a> {
cur_line: usize,
newline_count: usize,
errors: Vec<FormattingError>,
issue_seeker: BadIssueSeeker,
line_buffer: String,
current_line_contains_string_literal: bool,
format_line: bool,
allow_issue_seek: bool,
config: &'a Config,
}
@@ -494,7 +504,6 @@ fn new(
skipped_range: &'a [(usize, usize)],
config: &'a Config,
) -> FormatLines<'a> {
let issue_seeker = BadIssueSeeker::new(config.report_todo(), config.report_fixme());
FormatLines {
name,
skipped_range,
@@ -503,8 +512,6 @@ fn new(
cur_line: 1,
newline_count: 0,
errors: vec![],
allow_issue_seek: !issue_seeker.is_disabled(),
issue_seeker,
line_buffer: String::with_capacity(config.max_width() * 2),
current_line_contains_string_literal: false,
format_line: config.file_lines().contains_line(name, 1),
@@ -512,20 +519,6 @@ fn new(
}
}
fn check_license(&mut self, text: &mut String) {
if let Some(ref license_template) = self.config.license_template {
if !license_template.is_match(text) {
self.errors.push(FormattingError {
line: self.cur_line,
kind: ErrorKind::LicenseCheck,
is_comment: false,
is_string: false,
line_buffer: String::new(),
});
}
}
}
// Iterate over the chars in the file map.
fn iterate(&mut self, text: &mut String) {
for (kind, c) in CharClasses::new(text.chars()) {
@@ -533,13 +526,6 @@ fn iterate(&mut self, text: &mut String) {
continue;
}
if self.allow_issue_seek && self.format_line {
// Add warnings for bad todos/ fixmes
if let Some(issue) = self.issue_seeker.inspect(c) {
self.push_err(ErrorKind::BadIssue(issue), false, false);
}
}
if c == '\n' {
self.new_line(kind);
} else {
+71 -16
View File
@@ -2,6 +2,10 @@
use std::cmp::Ordering;
use std::fmt;
use core::hash::{Hash, Hasher};
use itertools::Itertools;
use rustc_ast::ast::{self, UseTreeKind};
use rustc_span::{
symbol::{self, sym},
@@ -10,6 +14,7 @@
use crate::comment::combine_strs_with_missing_comments;
use crate::config::lists::*;
use crate::config::ImportGranularity;
use crate::config::{Edition, IndentStyle};
use crate::lists::{
definitive_tactic, itemize_list, write_list, ListFormatting, ListItem, Separator,
@@ -86,7 +91,7 @@ pub(crate) fn format_import(&mut self, item: &ast::Item, tree: &ast::UseTree) {
// sorting.
// FIXME we do a lot of allocation to make our own representation.
#[derive(Clone, Eq, PartialEq)]
#[derive(Clone, Eq, Hash, PartialEq)]
pub(crate) enum UseSegment {
Ident(String, Option<String>),
Slf(Option<String>),
@@ -180,17 +185,36 @@ fn from_path_segment(
}
})
}
fn contains_comment(&self) -> bool {
if let UseSegment::List(list) = self {
list.iter().any(|subtree| subtree.contains_comment())
} else {
false
}
}
}
pub(crate) fn merge_use_trees(use_trees: Vec<UseTree>, merge_by: SharedPrefix) -> Vec<UseTree> {
pub(crate) fn normalize_use_trees_with_granularity(
use_trees: Vec<UseTree>,
import_granularity: ImportGranularity,
) -> Vec<UseTree> {
let merge_by = match import_granularity {
ImportGranularity::Item => return flatten_use_trees(use_trees, ImportGranularity::Item),
ImportGranularity::Preserve => return use_trees,
ImportGranularity::Crate => SharedPrefix::Crate,
ImportGranularity::Module => SharedPrefix::Module,
ImportGranularity::One => SharedPrefix::One,
};
let mut result = Vec::with_capacity(use_trees.len());
for use_tree in use_trees {
if use_tree.has_comment() || use_tree.attrs.is_some() {
if use_tree.contains_comment() || use_tree.attrs.is_some() {
result.push(use_tree);
continue;
}
for mut flattened in use_tree.flatten() {
for mut flattened in use_tree.flatten(import_granularity) {
if let Some(tree) = result
.iter_mut()
.find(|tree| tree.share_prefix(&flattened, merge_by))
@@ -208,11 +232,17 @@ pub(crate) fn merge_use_trees(use_trees: Vec<UseTree>, merge_by: SharedPrefix) -
result
}
pub(crate) fn flatten_use_trees(use_trees: Vec<UseTree>) -> Vec<UseTree> {
fn flatten_use_trees(
use_trees: Vec<UseTree>,
import_granularity: ImportGranularity,
) -> Vec<UseTree> {
// Return non-sorted single occurance of the use-trees text string;
// order is by first occurance of the use-tree.
use_trees
.into_iter()
.flat_map(UseTree::flatten)
.flat_map(|tree| tree.flatten(import_granularity))
.map(UseTree::nest_trailing_self)
.unique()
.collect()
}
@@ -541,6 +571,10 @@ fn has_comment(&self) -> bool {
self.list_item.as_ref().map_or(false, ListItem::has_comment)
}
fn contains_comment(&self) -> bool {
self.has_comment() || self.path.iter().any(|path| path.contains_comment())
}
fn same_visibility(&self, other: &UseTree) -> bool {
match (&self.visibility, &other.visibility) {
(
@@ -567,6 +601,7 @@ fn share_prefix(&self, other: &UseTree, shared_prefix: SharedPrefix) -> bool {
if self.path.is_empty()
|| other.path.is_empty()
|| self.attrs.is_some()
|| self.contains_comment()
|| !self.same_visibility(other)
{
false
@@ -581,8 +616,8 @@ fn share_prefix(&self, other: &UseTree, shared_prefix: SharedPrefix) -> bool {
}
}
fn flatten(self) -> Vec<UseTree> {
if self.path.is_empty() {
fn flatten(self, import_granularity: ImportGranularity) -> Vec<UseTree> {
if self.path.is_empty() || self.contains_comment() {
return vec![self];
}
match self.path.clone().last().unwrap() {
@@ -595,7 +630,7 @@ fn flatten(self) -> Vec<UseTree> {
let prefix = &self.path[..self.path.len() - 1];
let mut result = vec![];
for nested_use_tree in list {
for flattend in &mut nested_use_tree.clone().flatten() {
for flattend in &mut nested_use_tree.clone().flatten(import_granularity) {
let mut new_path = prefix.to_vec();
new_path.append(&mut flattend.path);
result.push(UseTree {
@@ -603,7 +638,11 @@ fn flatten(self) -> Vec<UseTree> {
span: self.span,
list_item: None,
visibility: self.visibility.clone(),
attrs: None,
// only retain attributes for `ImportGranularity::Item`
attrs: match import_granularity {
ImportGranularity::Item => self.attrs.clone(),
_ => None,
},
});
}
}
@@ -748,6 +787,12 @@ struct SimilarTree<'a> {
trees.sort();
}
impl Hash for UseTree {
fn hash<H: Hasher>(&self, state: &mut H) {
self.path.hash(state);
}
}
impl PartialOrd for UseSegment {
fn partial_cmp(&self, other: &UseSegment) -> Option<Ordering> {
Some(self.cmp(other))
@@ -951,7 +996,7 @@ fn rewrite(&self, context: &RewriteContext<'_>, mut shape: Shape) -> Option<Stri
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub(crate) enum SharedPrefix {
enum SharedPrefix {
Crate,
Module,
One,
@@ -1106,7 +1151,10 @@ macro_rules! parse_use_trees {
macro_rules! test_merge {
($by:ident, [$($input:expr),* $(,)*], [$($output:expr),* $(,)*]) => {
assert_eq!(
merge_use_trees(parse_use_trees!($($input,)*), SharedPrefix::$by),
normalize_use_trees_with_granularity(
parse_use_trees!($($input,)*),
ImportGranularity::$by,
),
parse_use_trees!($($output,)*),
);
}
@@ -1215,12 +1263,18 @@ fn test_use_tree_merge_one() {
#[test]
fn test_flatten_use_trees() {
assert_eq!(
flatten_use_trees(parse_use_trees!["foo::{a::{b, c}, d::e}"]),
flatten_use_trees(
parse_use_trees!["foo::{a::{b, c}, d::e}"],
ImportGranularity::Item
),
parse_use_trees!["foo::a::b", "foo::a::c", "foo::d::e"]
);
assert_eq!(
flatten_use_trees(parse_use_trees!["foo::{self, a, b::{c, d}, e::*}"]),
flatten_use_trees(
parse_use_trees!["foo::{self, a, b::{c, d}, e::*}"],
ImportGranularity::Item
),
parse_use_trees![
"foo::{self}",
"foo::a",
@@ -1234,12 +1288,13 @@ fn test_flatten_use_trees() {
#[test]
fn test_use_tree_flatten() {
assert_eq!(
parse_use_tree("a::b::{c, d, e, f}").flatten(),
parse_use_tree("a::b::{c, d, e, f}").flatten(ImportGranularity::Item),
parse_use_trees!("a::b::c", "a::b::d", "a::b::e", "a::b::f",)
);
assert_eq!(
parse_use_tree("a::b::{c::{d, e, f}, g, h::{i, j, k}}").flatten(),
parse_use_tree("a::b::{c::{d, e, f}, g, h::{i, j, k}}")
.flatten(ImportGranularity::Item),
parse_use_trees![
"a::b::c::d",
"a::b::c::e",
-309
View File
@@ -1,309 +0,0 @@
// Objects for seeking through a char stream for occurrences of TODO and FIXME.
// Depending on the loaded configuration, may also check that these have an
// associated issue number.
use std::fmt;
use crate::config::ReportTactic;
const TO_DO_CHARS: &[char] = &['t', 'o', 'd', 'o'];
const FIX_ME_CHARS: &[char] = &['f', 'i', 'x', 'm', 'e'];
// Enabled implementation detail is here because it is
// irrelevant outside the issues module
fn is_enabled(report_tactic: ReportTactic) -> bool {
report_tactic != ReportTactic::Never
}
#[derive(Clone, Copy)]
enum Seeking {
Issue { todo_idx: usize, fixme_idx: usize },
Number { issue: Issue, part: NumberPart },
}
#[derive(Clone, Copy)]
enum NumberPart {
OpenParen,
Pound,
Number,
CloseParen,
}
#[derive(PartialEq, Eq, Debug, Clone, Copy)]
pub struct Issue {
issue_type: IssueType,
// Indicates whether we're looking for issues with missing numbers, or
// all issues of this type.
missing_number: bool,
}
impl fmt::Display for Issue {
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
let msg = match self.issue_type {
IssueType::Todo => "TODO",
IssueType::Fixme => "FIXME",
};
let details = if self.missing_number {
" without issue number"
} else {
""
};
write!(fmt, "{}{}", msg, details)
}
}
#[derive(PartialEq, Eq, Debug, Clone, Copy)]
enum IssueType {
Todo,
Fixme,
}
enum IssueClassification {
Good,
Bad(Issue),
None,
}
pub(crate) struct BadIssueSeeker {
state: Seeking,
report_todo: ReportTactic,
report_fixme: ReportTactic,
}
impl BadIssueSeeker {
pub(crate) fn new(report_todo: ReportTactic, report_fixme: ReportTactic) -> BadIssueSeeker {
BadIssueSeeker {
state: Seeking::Issue {
todo_idx: 0,
fixme_idx: 0,
},
report_todo,
report_fixme,
}
}
pub(crate) fn is_disabled(&self) -> bool {
!is_enabled(self.report_todo) && !is_enabled(self.report_fixme)
}
// Check whether or not the current char is conclusive evidence for an
// unnumbered TO-DO or FIX-ME.
pub(crate) fn inspect(&mut self, c: char) -> Option<Issue> {
match self.state {
Seeking::Issue {
todo_idx,
fixme_idx,
} => {
self.state = self.inspect_issue(c, todo_idx, fixme_idx);
}
Seeking::Number { issue, part } => {
let result = self.inspect_number(c, issue, part);
if let IssueClassification::None = result {
return None;
}
self.state = Seeking::Issue {
todo_idx: 0,
fixme_idx: 0,
};
if let IssueClassification::Bad(issue) = result {
return Some(issue);
}
}
}
None
}
fn inspect_issue(&mut self, c: char, mut todo_idx: usize, mut fixme_idx: usize) -> Seeking {
if let Some(lower_case_c) = c.to_lowercase().next() {
if is_enabled(self.report_todo) && lower_case_c == TO_DO_CHARS[todo_idx] {
todo_idx += 1;
if todo_idx == TO_DO_CHARS.len() {
return Seeking::Number {
issue: Issue {
issue_type: IssueType::Todo,
missing_number: matches!(self.report_todo, ReportTactic::Unnumbered),
},
part: NumberPart::OpenParen,
};
}
fixme_idx = 0;
} else if is_enabled(self.report_fixme) && lower_case_c == FIX_ME_CHARS[fixme_idx] {
// Exploit the fact that the character sets of todo and fixme
// are disjoint by adding else.
fixme_idx += 1;
if fixme_idx == FIX_ME_CHARS.len() {
return Seeking::Number {
issue: Issue {
issue_type: IssueType::Fixme,
missing_number: matches!(self.report_fixme, ReportTactic::Unnumbered),
},
part: NumberPart::OpenParen,
};
}
todo_idx = 0;
} else {
todo_idx = 0;
fixme_idx = 0;
}
}
Seeking::Issue {
todo_idx,
fixme_idx,
}
}
fn inspect_number(
&mut self,
c: char,
issue: Issue,
mut part: NumberPart,
) -> IssueClassification {
if !issue.missing_number || c == '\n' {
return IssueClassification::Bad(issue);
} else if c == ')' {
return if let NumberPart::CloseParen = part {
IssueClassification::Good
} else {
IssueClassification::Bad(issue)
};
}
match part {
NumberPart::OpenParen => {
if c != '(' {
return IssueClassification::Bad(issue);
} else {
part = NumberPart::Pound;
}
}
NumberPart::Pound => {
if c == '#' {
part = NumberPart::Number;
}
}
NumberPart::Number => {
if ('0'..='9').contains(&c) {
part = NumberPart::CloseParen;
} else {
return IssueClassification::Bad(issue);
}
}
NumberPart::CloseParen => {}
}
self.state = Seeking::Number { part, issue };
IssueClassification::None
}
}
#[test]
fn find_unnumbered_issue() {
fn check_fail(text: &str, failing_pos: usize) {
let mut seeker = BadIssueSeeker::new(ReportTactic::Unnumbered, ReportTactic::Unnumbered);
assert_eq!(
Some(failing_pos),
text.find(|c| seeker.inspect(c).is_some())
);
}
fn check_pass(text: &str) {
let mut seeker = BadIssueSeeker::new(ReportTactic::Unnumbered, ReportTactic::Unnumbered);
assert_eq!(None, text.find(|c| seeker.inspect(c).is_some()));
}
check_fail("TODO\n", 4);
check_pass(" TO FIX DOME\n");
check_fail(" \n FIXME\n", 8);
check_fail("FIXME(\n", 6);
check_fail("FIXME(#\n", 7);
check_fail("FIXME(#1\n", 8);
check_fail("FIXME(#)1\n", 7);
check_pass("FIXME(#1222)\n");
check_fail("FIXME(#12\n22)\n", 9);
check_pass("FIXME(@maintainer, #1222, hello)\n");
check_fail("TODO(#22) FIXME\n", 15);
}
#[test]
fn find_issue() {
fn is_bad_issue(text: &str, report_todo: ReportTactic, report_fixme: ReportTactic) -> bool {
let mut seeker = BadIssueSeeker::new(report_todo, report_fixme);
text.chars().any(|c| seeker.inspect(c).is_some())
}
assert!(is_bad_issue(
"TODO(@maintainer, #1222, hello)\n",
ReportTactic::Always,
ReportTactic::Never,
));
assert!(!is_bad_issue(
"TODO: no number\n",
ReportTactic::Never,
ReportTactic::Always,
));
assert!(!is_bad_issue(
"Todo: mixed case\n",
ReportTactic::Never,
ReportTactic::Always,
));
assert!(is_bad_issue(
"This is a FIXME(#1)\n",
ReportTactic::Never,
ReportTactic::Always,
));
assert!(is_bad_issue(
"This is a FixMe(#1) mixed case\n",
ReportTactic::Never,
ReportTactic::Always,
));
assert!(!is_bad_issue(
"bad FIXME\n",
ReportTactic::Always,
ReportTactic::Never,
));
}
#[test]
fn issue_type() {
let mut seeker = BadIssueSeeker::new(ReportTactic::Always, ReportTactic::Never);
let expected = Some(Issue {
issue_type: IssueType::Todo,
missing_number: false,
});
assert_eq!(
expected,
"TODO(#100): more awesomeness"
.chars()
.map(|c| seeker.inspect(c))
.find(Option::is_some)
.unwrap()
);
let mut seeker = BadIssueSeeker::new(ReportTactic::Never, ReportTactic::Unnumbered);
let expected = Some(Issue {
issue_type: IssueType::Fixme,
missing_number: true,
});
assert_eq!(
expected,
"Test. FIXME: bad, bad, not good"
.chars()
.map(|c| seeker.inspect(c))
.find(Option::is_some)
.unwrap()
);
}
+1 -1
View File
@@ -1770,7 +1770,7 @@ pub(crate) fn rewrite_struct_field(
.offset_left(overhead + spacing.len())
.and_then(|ty_shape| field.ty.rewrite(context, ty_shape));
if let Some(ref ty) = orig_ty {
if !ty.contains('\n') {
if !ty.contains('\n') && !contains_comment(context.snippet(missing_span)) {
return Some(attr_prefix + &spacing + ty);
}
}
+1 -13
View File
@@ -40,7 +40,6 @@
use crate::comment::LineClasses;
use crate::emitter::Emitter;
use crate::formatting::{FormatErrorMap, FormattingError, ReportedErrors, SourceFile};
use crate::issues::Issue;
use crate::modules::ModuleResolutionError;
use crate::parse::parser::DirectoryOwnership;
use crate::shape::Indent;
@@ -70,7 +69,6 @@
pub(crate) mod formatting;
mod ignore_path;
mod imports;
mod issues;
mod items;
mod lists;
mod macros;
@@ -111,12 +109,6 @@ pub enum ErrorKind {
/// Line ends in whitespace.
#[error("left behind trailing whitespace")]
TrailingWhitespace,
/// TODO or FIXME item without an issue number.
#[error("found {0}")]
BadIssue(Issue),
/// License check has failed.
#[error("license check failed")]
LicenseCheck,
/// Used deprecated skip attribute.
#[error("`rustfmt_skip` is deprecated; use `rustfmt::skip`")]
DeprecatedAttr,
@@ -237,11 +229,7 @@ fn track_errors(&self, new_errors: &[FormattingError]) {
ErrorKind::LostComment => {
errs.has_unformatted_code_errors = true;
}
ErrorKind::BadIssue(_)
| ErrorKind::LicenseCheck
| ErrorKind::DeprecatedAttr
| ErrorKind::BadAttr
| ErrorKind::VersionMismatch => {
ErrorKind::DeprecatedAttr | ErrorKind::BadAttr | ErrorKind::VersionMismatch => {
errs.has_check_errors = true;
}
_ => {}
+6 -6
View File
@@ -32,7 +32,7 @@
/// Organized as a list of `(&str, usize)` tuples, giving the name of the macro and the number of
/// arguments before the format string (none for `format!("format", ...)`, one for `assert!(result,
/// "format", ...)`, two for `assert_eq!(left, right, "format", ...)`).
const SPECIAL_MACRO_WHITELIST: &[(&str, usize)] = &[
const SPECIAL_CASE_MACROS: &[(&str, usize)] = &[
// format! like macros
// From the Rust Standard Library.
("eprint!", 0),
@@ -60,7 +60,7 @@
("debug_assert_ne!", 2),
];
const SPECIAL_ATTR_WHITELIST: &[(&str, usize)] = &[
const SPECIAL_CASE_ATTR: &[(&str, usize)] = &[
// From the `failure` crate.
("fail", 0),
];
@@ -182,10 +182,10 @@ pub(crate) fn can_be_overflowed(&self, context: &RewriteContext<'_>, len: usize)
}
}
fn whitelist(&self) -> &'static [(&'static str, usize)] {
fn special_cases(&self) -> &'static [(&'static str, usize)] {
match self {
OverflowableItem::MacroArg(..) => SPECIAL_MACRO_WHITELIST,
OverflowableItem::NestedMetaItem(..) => SPECIAL_ATTR_WHITELIST,
OverflowableItem::MacroArg(..) => SPECIAL_CASE_MACROS,
OverflowableItem::NestedMetaItem(..) => SPECIAL_CASE_ATTR,
_ => &[],
}
}
@@ -770,7 +770,7 @@ pub(crate) fn maybe_get_args_offset(
) -> Option<(bool, usize)> {
if let Some(&(_, num_args_before)) = args
.get(0)?
.whitelist()
.special_cases()
.iter()
.find(|&&(s, _)| s == callee_str)
{
+1 -1
View File
@@ -170,7 +170,7 @@ pub(crate) fn new(config: &Config) -> Result<ParseSess, ErrorKind> {
/// * `relative` - If Some(symbol), the symbol name is a directory relative to the dir_path.
/// If relative is Some, resolve the submodle at {dir_path}/{symbol}/{id}.rs
/// or {dir_path}/{symbol}/{id}/mod.rs. if None, resolve the module at {dir_path}/{id}.rs.
/// * `dir_path` - Module resolution will occur relative to this direcotry.
/// * `dir_path` - Module resolution will occur relative to this directory.
pub(crate) fn default_submod_path(
&self,
id: symbol::Ident,
+6 -11
View File
@@ -11,8 +11,8 @@
use rustc_ast::ast;
use rustc_span::{symbol::sym, Span};
use crate::config::{Config, GroupImportsTactic, ImportGranularity};
use crate::imports::{flatten_use_trees, merge_use_trees, SharedPrefix, UseSegment, UseTree};
use crate::config::{Config, GroupImportsTactic};
use crate::imports::{normalize_use_trees_with_granularity, UseSegment, UseTree};
use crate::items::{is_mod_decl, rewrite_extern_crate, rewrite_mod};
use crate::lists::{itemize_list, write_list, ListFormatting, ListItem};
use crate::rewrite::RewriteContext;
@@ -107,15 +107,10 @@ fn rewrite_reorderable_or_regroupable_items(
for (item, list_item) in normalized_items.iter_mut().zip(list_items) {
item.list_item = Some(list_item.clone());
}
normalized_items = match context.config.imports_granularity() {
ImportGranularity::Crate => merge_use_trees(normalized_items, SharedPrefix::Crate),
ImportGranularity::Module => {
merge_use_trees(normalized_items, SharedPrefix::Module)
}
ImportGranularity::Item => flatten_use_trees(normalized_items),
ImportGranularity::One => merge_use_trees(normalized_items, SharedPrefix::One),
ImportGranularity::Preserve => normalized_items,
};
normalized_items = normalize_use_trees_with_granularity(
normalized_items,
context.config.imports_granularity(),
);
let mut regrouped_items = match context.config.group_imports() {
GroupImportsTactic::Preserve | GroupImportsTactic::One => {
+13
View File
@@ -12,6 +12,7 @@
use crate::skip::SkipContext;
use crate::visitor::SnippetProvider;
use crate::FormatReport;
use rustc_data_structures::stable_map::FxHashMap;
pub(crate) trait Rewrite {
/// Rewrite self into shape.
@@ -24,10 +25,22 @@ fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String>
}
}
#[derive(Clone, PartialEq, Eq, Hash)]
pub(crate) struct QueryId {
pub(crate) shape: Shape,
pub(crate) span: Span,
}
// We use Option<HashMap> instead of HashMap, because in case of `None`
// the function clean the memoize map, but it doesn't clean when
// there is `Some(empty)`, so they are different.
pub(crate) type Memoize = Rc<Cell<Option<FxHashMap<QueryId, Option<String>>>>>;
#[derive(Clone)]
pub(crate) struct RewriteContext<'a> {
pub(crate) parse_sess: &'a ParseSess,
pub(crate) config: &'a Config,
pub(crate) memoize: Memoize,
pub(crate) inside_macro: Rc<Cell<bool>>,
// Force block indent style even if we are using visual indent style.
pub(crate) use_block: Cell<bool>,
+2 -2
View File
@@ -4,7 +4,7 @@
use crate::Config;
#[derive(Copy, Clone, Debug)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub(crate) struct Indent {
// Width of the block indent, in characters. Must be a multiple of
// Config::tab_spaces.
@@ -139,7 +139,7 @@ fn sub(self, rhs: usize) -> Indent {
// 8096 is close enough to infinite for rustfmt.
const INFINITE_SHAPE_WIDTH: usize = 8096;
#[derive(Copy, Clone, Debug)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub(crate) struct Shape {
pub(crate) width: usize,
// The current indentation of code.
+38 -7
View File
@@ -315,20 +315,21 @@ fn break_string(max_width: usize, trim_end: bool, line_end: &str, input: &[&str]
// Found a whitespace and what is on its left side is big enough.
Some(index) if index >= MIN_STRING => break_at(index),
// No whitespace found, try looking for a punctuation instead
_ => match input[0..max_width_index_in_input]
.iter()
.rposition(|grapheme| is_punctuation(grapheme))
_ => match (0..max_width_index_in_input)
.rev()
.skip_while(|pos| !is_valid_linebreak(input, *pos))
.next()
{
// Found a punctuation and what is on its left side is big enough.
Some(index) if index >= MIN_STRING => break_at(index),
// Either no boundary character was found to the left of `input[max_chars]`, or the line
// got too small. We try searching for a boundary character to the right.
_ => match input[max_width_index_in_input..]
.iter()
.position(|grapheme| is_whitespace(grapheme) || is_punctuation(grapheme))
_ => match (max_width_index_in_input..input.len())
.skip_while(|pos| !is_valid_linebreak(input, *pos))
.next()
{
// A boundary was found after the line limit
Some(index) => break_at(max_width_index_in_input + index),
Some(index) => break_at(index),
// No boundary to the right, the input cannot be broken
None => SnippetState::EndOfInput(input.concat()),
},
@@ -336,6 +337,23 @@ fn break_string(max_width: usize, trim_end: bool, line_end: &str, input: &[&str]
}
}
fn is_valid_linebreak(input: &[&str], pos: usize) -> bool {
let is_whitespace = is_whitespace(input[pos]);
if is_whitespace {
return true;
}
let is_punctuation = is_punctuation(input[pos]);
if is_punctuation && !is_part_of_type(input, pos) {
return true;
}
false
}
fn is_part_of_type(input: &[&str], pos: usize) -> bool {
input.get(pos..=pos + 1) == Some(&[":", ":"])
|| input.get(pos.saturating_sub(1)..=pos) == Some(&[":", ":"])
}
fn is_new_line(grapheme: &str) -> bool {
let bytes = grapheme.as_bytes();
bytes.starts_with(b"\n") || bytes.starts_with(b"\r\n")
@@ -369,6 +387,19 @@ fn issue343() {
rewrite_string("eq_", &fmt, 2);
}
#[test]
fn line_break_at_valid_points_test() {
let string = "[TheName](Dont::break::my::type::That::would::be::very::nice) break here";
let graphemes = UnicodeSegmentation::graphemes(&*string, false).collect::<Vec<&str>>();
assert_eq!(
break_string(20, false, "", &graphemes[..]),
SnippetState::LineEnd(
"[TheName](Dont::break::my::type::That::would::be::very::nice) ".to_string(),
62
)
);
}
#[test]
fn should_break_on_whitespace() {
let string = "Placerat felis. Mauris porta ante sagittis purus.";
+27 -12
View File
@@ -9,7 +9,7 @@
use std::str::Chars;
use std::thread;
use crate::config::{Color, Config, EmitMode, FileName, NewlineStyle, ReportTactic};
use crate::config::{Color, Config, EmitMode, FileName, NewlineStyle};
use crate::formatting::{ReportedErrors, SourceFile};
use crate::rustfmt_diff::{make_diff, print_diff, DiffLine, Mismatch, ModifiedChunk, OutputWriter};
use crate::source_file;
@@ -24,7 +24,7 @@
const DIFF_CONTEXT_SIZE: usize = 3;
// A list of files on which we want to skip testing.
const SKIP_FILE_WHITE_LIST: &[&str] = &[
const FILE_SKIP_LIST: &[&str] = &[
// We want to make sure that the `skip_children` is correctly working,
// so we do not want to test this file directly.
"configs/skip_children/foo/mod.rs",
@@ -90,7 +90,7 @@ fn is_subpath<P>(path: &Path, subpath: &P) -> bool
}
fn is_file_skip(path: &Path) -> bool {
SKIP_FILE_WHITE_LIST
FILE_SKIP_LIST
.iter()
.any(|file_path| is_subpath(path, file_path))
}
@@ -578,6 +578,30 @@ fn stdin_generated_files_issue_5172() {
);
}
#[test]
fn stdin_handles_mod_inner_ignore_attr() {
// see https://github.com/rust-lang/rustfmt/issues/5368
init_log();
let input = String::from("#![rustfmt::skip]\n\nfn main() { }");
let mut child = Command::new(rustfmt().to_str().unwrap())
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.spawn()
.expect("failed to execute child");
{
let stdin = child.stdin.as_mut().expect("failed to get stdin");
stdin
.write_all(input.as_bytes())
.expect("failed to write stdin");
}
let output = child.wait_with_output().expect("failed to wait on child");
assert!(output.status.success());
assert!(output.stderr.is_empty());
assert_eq!(input, String::from_utf8(output.stdout).unwrap());
}
#[test]
fn format_lines_errors_are_reported() {
init_log();
@@ -688,9 +712,6 @@ fn read_config(filename: &Path) -> Config {
}
}
// Don't generate warnings for to-do items.
config.set().report_todo(ReportTactic::Never);
config
}
@@ -957,12 +978,6 @@ fn rustfmt() -> PathBuf {
// Chop off `deps`.
me.pop();
// If we run `cargo test --release`, we might only have a release build.
if cfg!(release) {
// `../release/`
me.pop();
me.push("release");
}
me.push("rustfmt");
assert!(
me.is_file() || me.with_extension("exe").is_file(),
+6 -1
View File
@@ -17,7 +17,7 @@
use crate::macros::{macro_style, rewrite_macro, rewrite_macro_def, MacroPosition};
use crate::modules::Module;
use crate::parse::session::ParseSess;
use crate::rewrite::{Rewrite, RewriteContext};
use crate::rewrite::{Memoize, Rewrite, RewriteContext};
use crate::shape::{Indent, Shape};
use crate::skip::{is_skip_attr, SkipContext};
use crate::source_map::{LineRangeUtils, SpanUtils};
@@ -71,6 +71,7 @@ pub(crate) fn end_pos(&self) -> BytePos {
pub(crate) struct FmtVisitor<'a> {
parent_context: Option<&'a RewriteContext<'a>>,
pub(crate) memoize: Memoize,
pub(crate) parse_sess: &'a ParseSess,
pub(crate) buffer: String,
pub(crate) last_pos: BytePos,
@@ -758,6 +759,7 @@ pub(crate) fn from_context(ctx: &'a RewriteContext<'_>) -> FmtVisitor<'a> {
ctx.config,
ctx.snippet_provider,
ctx.report.clone(),
ctx.memoize.clone(),
);
visitor.skip_context.update(ctx.skip_context.clone());
visitor.set_parent_context(ctx);
@@ -769,10 +771,12 @@ pub(crate) fn from_parse_sess(
config: &'a Config,
snippet_provider: &'a SnippetProvider,
report: FormatReport,
memoize: Memoize,
) -> FmtVisitor<'a> {
FmtVisitor {
parent_context: None,
parse_sess: parse_session,
memoize,
buffer: String::with_capacity(snippet_provider.big_snippet.len() * 2),
last_pos: BytePos(0),
block_indent: Indent::empty(),
@@ -995,6 +999,7 @@ pub(crate) fn get_context(&self) -> RewriteContext<'_> {
RewriteContext {
parse_sess: self.parse_sess,
config: self.config,
memoize: self.memoize.clone(),
inside_macro: Rc::new(Cell::new(false)),
use_block: Cell::new(false),
is_if_else_block: Cell::new(false),
@@ -1,2 +0,0 @@
unstable_features = true
license_template_path = ""
@@ -6,7 +6,5 @@ brace_style = "SameLineWhere"
fn_args_layout = "Tall"
trailing_comma = "Vertical"
indent_style = "Block"
report_todo = "Always"
report_fixme = "Never"
reorder_imports = false
format_strings = true
@@ -1,2 +0,0 @@
// rustfmt-license_template_path: tests/license-template/lt.txt
// Copyright {\d+} The rustfmt developers.
+1 -1
View File
@@ -143,7 +143,7 @@ fn mod_resolution_error_relative_module_not_found() {
let args = ["tests/mod-resolver/module-not-found/relative_module/lib.rs"];
let (_stdout, stderr) = rustfmt(&args);
// The file `./a.rs` and directory `./a` both exist.
// Module resolution fails becuase we're unable to find `./a/b.rs`
// Module resolution fails because we're unable to find `./a/b.rs`
#[cfg(not(windows))]
assert!(stderr.contains("a/b.rs does not exist"));
#[cfg(windows)]
@@ -0,0 +1,27 @@
// rustfmt-group_imports: StdExternalCrate
use chrono::Utc;
use super::update::convert_publish_payload;
use juniper::{FieldError, FieldResult};
use uuid::Uuid;
use alloc::alloc::Layout;
extern crate uuid;
use std::sync::Arc;
use broker::database::PooledConnection;
use super::schema::{Context, Payload};
use core::f32;
use crate::models::Event;
@@ -35,3 +35,31 @@
use {k::{a, b}, l::{a, b}};
use {k::{c, d}, l::{c, d}};
use b::{f::g, h::{i, j} /* After b::h group */};
use b::e;
use b::{/* Before b::l group */ l::{self, m, n::o, p::*}, q};
use b::d;
use b::r; // After b::r
use b::q::{self /* After b::q::self */};
use b::u::{
a,
b,
};
use b::t::{
// Before b::t::a
a,
b,
};
use b::s::{
a,
b, // After b::s::b
};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::t::{/* Before b::t::self */ self};
use b::c;
@@ -0,0 +1,6 @@
use crate::lexer;
use crate::lexer::tokens::TokenData;
use crate::lexer::{tokens::TokenData};
use crate::lexer::self;
use crate::lexer::{self};
use crate::lexer::{self, tokens::TokenData};
@@ -0,0 +1,13 @@
// rustfmt-imports_granularity: Item
// rustfmt-reorder_imports: false
// rustfmt-group_imports: StdExternalCrate
use crate::lexer;
use crate::lexer;
use crate::lexer::tokens::TokenData;
use crate::lexer::{tokens::TokenData};
use crate::lexer::self;
use crate::lexer;
use crate::lexer;
use crate::lexer::{self};
use crate::lexer::{self, tokens::TokenData};
@@ -0,0 +1,11 @@
// rustfmt-imports_granularity: Item
use crate::lexer;
use crate::lexer;
use crate::lexer::tokens::TokenData;
use crate::lexer::{tokens::TokenData};
use crate::lexer::self;
use crate::lexer;
use crate::lexer;
use crate::lexer::{self};
use crate::lexer::{self, tokens::TokenData};
@@ -0,0 +1,34 @@
// rustfmt-imports_granularity: Item
use a::{b, c, d};
use a::{f::g, h::{i, j}};
use a::{l::{self, m, n::o, p::*}};
use a::q::{self};
use b::{f::g, h::{i, j} /* After b::h group */};
use b::e;
use b::{/* Before b::l group */ l::{self, m, n::o, p::*}, q};
use b::d;
use b::r; // After b::r
use b::q::{self /* After b::q::self */};
use b::u::{
a,
b,
};
use b::t::{
// Before b::t::a
a,
b,
};
use b::s::{
a,
b, // After b::s::b
};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::t::{/* Before b::t::self */ self};
use b::c;
@@ -0,0 +1,47 @@
// rustfmt-imports_granularity: Module
use a::{b::c, d::e};
use a::{f, g::{h, i}};
use a::{j::{self, k::{self, l}, m}, n::{o::p, q}};
pub use a::{r::s, t};
use b::{c::d, self};
#[cfg(test)]
use foo::{a::b, c::d};
use foo::e;
use bar::{
// comment
a::b,
// more comment
c::d,
e::f,
};
use b::{f::g, h::{i, j} /* After b::h group */};
use b::e;
use b::{/* Before b::l group */ l::{self, m, n::o, p::*}, q};
use b::d;
use b::r; // After b::r
use b::q::{self /* After b::q::self */};
use b::u::{
a,
b,
};
use b::t::{
// Before b::t::a
a,
b,
};
use b::s::{
a,
b, // After b::s::b
};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::t::{/* Before b::t::self */ self};
use b::c;
@@ -1,6 +0,0 @@
// rustfmt-imports_granularity: Item
use a::{b, c, d};
use a::{f::g, h::{i, j}};
use a::{l::{self, m, n::o, p::*}};
use a::q::{self};
@@ -1,19 +0,0 @@
// rustfmt-imports_granularity: Module
use a::{b::c, d::e};
use a::{f, g::{h, i}};
use a::{j::{self, k::{self, l}, m}, n::{o::p, q}};
pub use a::{r::s, t};
use b::{c::d, self};
#[cfg(test)]
use foo::{a::b, c::d};
use foo::e;
use bar::{
// comment
a::b,
// more comment
c::d,
e::f,
};
@@ -58,3 +58,31 @@
};
use b as x;
use a::ad::ada;
use b::{f::g, h::{i, j} /* After b::h group */};
use b::e;
use b::{/* Before b::l group */ l::{self, m, n::o, p::*}, q};
use b::d;
use b::r; // After b::r
use b::q::{self /* After b::q::self */};
use b::u::{
a,
b,
};
use b::t::{
// Before b::t::a
a,
b,
};
use b::s::{
a,
b, // After b::s::b
};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::t::{/* Before b::t::self */ self};
use b::c;
@@ -0,0 +1,22 @@
// rustfmt-imports_granularity: Item
// rustfmt-group_imports: One
// Confirm that attributes are duplicated to all items in the use statement
#[cfg(feature = "foo")]
use std::collections::{
HashMap,
HashSet,
};
// Separate the imports below from the ones above
const A: usize = 0;
// Copying attrs works with import grouping as well
#[cfg(feature = "foo")]
use std::collections::{
HashMap,
HashSet,
};
#[cfg(feature = "spam")]
use qux::{bar, baz};
@@ -0,0 +1,14 @@
// rustfmt-wrap_comments: true
/// [MyType](VeryLongPathToMyType::NoLineBreak::Here::Okay::ThatWouldBeNice::Thanks)
fn documented_with_longtype() {
// # We're using a long type link, rustfmt should not break line
// on the type when `wrap_comments = true`
}
/// VeryLongPathToMyType::JustMyType::But::VeryVery::Long::NoLineBreak::Here::Okay::ThatWouldBeNice::Thanks
fn documented_with_verylongtype() {
// # We're using a long type link, rustfmt should not break line
// on the type when `wrap_comments = true`
}
@@ -1,5 +0,0 @@
// rustfmt-config: issue-3802.toml
fn main() {
println!("Hello world!");
}
@@ -1,6 +0,0 @@
// rustfmt-license_template_path: tests/license-template/lt.txt
// Copyright 2019 The rustfmt developers.
fn main() {
println!("Hello world!");
}
@@ -0,0 +1,638 @@
use super::SemverParser;
#[allow(dead_code, non_camel_case_types)]
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum Rule {
EOI,
range_set,
logical_or,
range,
empty,
hyphen,
simple,
primitive,
primitive_op,
partial,
xr,
xr_op,
nr,
tilde,
caret,
qualifier,
parts,
part,
space,
}
#[allow(clippy::all)]
impl ::pest::Parser<Rule> for SemverParser {
fn parse<'i>(
rule: Rule,
input: &'i str,
) -> ::std::result::Result<::pest::iterators::Pairs<'i, Rule>, ::pest::error::Error<Rule>> {
mod rules {
pub mod hidden {
use super::super::Rule;
#[inline]
#[allow(dead_code, non_snake_case, unused_variables)]
pub fn skip(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
Ok(state)
}
}
pub mod visible {
use super::super::Rule;
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn range_set(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::range_set, |state| {
state.sequence(|state| {
self::SOI(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| self::space(state))
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::range(state))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
state
.sequence(|state| {
self::logical_or(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::range(state))
})
.and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| {
state.sequence(|state| {
self::logical_or(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::range(state))
})
})
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| self::space(state))
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::EOI(state))
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn logical_or(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::logical_or, |state| {
state.sequence(|state| {
state
.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| self::space(state))
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| state.match_string("||"))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| self::space(state))
})
})
})
})
})
})
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn range(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::range, |state| {
self::hyphen(state)
.or_else(|state| {
state.sequence(|state| {
self::simple(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
state
.sequence(|state| {
state
.optional(|state| state.match_string(","))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
self::space(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| self::space(state))
})
})
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::simple(state))
})
.and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| {
state.sequence(|state| {
state
.optional(|state| state.match_string(","))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
self::space(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| self::space(state))
})
})
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::simple(state))
})
})
})
})
})
})
})
})
})
})
.or_else(|state| self::empty(state))
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn empty(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::empty, |state| state.match_string(""))
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn hyphen(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::hyphen, |state| {
state.sequence(|state| {
self::partial(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
self::space(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| self::space(state))
})
})
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| state.match_string("-"))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
self::space(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| self::space(state))
})
})
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::partial(state))
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn simple(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::simple, |state| {
self::primitive(state)
.or_else(|state| self::partial(state))
.or_else(|state| self::tilde(state))
.or_else(|state| self::caret(state))
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn primitive(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::primitive, |state| {
state.sequence(|state| {
self::primitive_op(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| self::space(state))
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::partial(state))
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn primitive_op(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::primitive_op, |state| {
state
.match_string("<=")
.or_else(|state| state.match_string(">="))
.or_else(|state| state.match_string(">"))
.or_else(|state| state.match_string("<"))
.or_else(|state| state.match_string("="))
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn partial(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::partial, |state| {
state.sequence(|state| {
self::xr(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.optional(|state| {
state.sequence(|state| {
state
.match_string(".")
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::xr(state))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.optional(|state| {
state.sequence(|state| {
state
.match_string(".")
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::xr(state))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| state.optional(|state| self::qualifier(state)))
})
})
})
})
})
})
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn xr(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::xr, |state| {
self::xr_op(state).or_else(|state| self::nr(state))
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn xr_op(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::xr_op, |state| {
state
.match_string("x")
.or_else(|state| state.match_string("X"))
.or_else(|state| state.match_string("*"))
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn nr(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::nr, |state| {
state.match_string("0").or_else(|state| {
state.sequence(|state| {
state
.match_range('1'..'9')
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
state.match_range('0'..'9').and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| state.match_range('0'..'9'))
})
})
})
})
})
})
})
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn tilde(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::tilde, |state| {
state.sequence(|state| {
state
.match_string("~>")
.or_else(|state| state.match_string("~"))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| self::space(state))
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::partial(state))
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn caret(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::caret, |state| {
state.sequence(|state| {
state
.match_string("^")
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| self::space(state))
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::partial(state))
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn qualifier(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::qualifier, |state| {
state.sequence(|state| {
state
.match_string("-")
.or_else(|state| state.match_string("+"))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::parts(state))
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn parts(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::parts, |state| {
state.sequence(|state| {
self::part(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
state
.sequence(|state| {
state
.match_string(".")
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::part(state))
})
.and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| {
state.sequence(|state| {
state
.match_string(".")
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::part(state))
})
})
})
})
})
})
})
})
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn part(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::part, |state| {
self::nr(state).or_else(|state| {
state.sequence(|state| {
state
.match_string("-")
.or_else(|state| state.match_range('0'..'9'))
.or_else(|state| state.match_range('A'..'Z'))
.or_else(|state| state.match_range('a'..'z'))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
state
.match_string("-")
.or_else(|state| state.match_range('0'..'9'))
.or_else(|state| state.match_range('A'..'Z'))
.or_else(|state| state.match_range('a'..'z'))
.and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(|state| {
state
.match_string("-")
.or_else(|state| state.match_range('0'..'9'))
.or_else(|state| state.match_range('A'..'Z'))
.or_else(|state| state.match_range('a'..'z'))
})
})
})
})
})
})
})
})
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn space(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state
.match_string(" ")
.or_else(|state| state.match_string("\t"))
}
#[inline]
#[allow(dead_code, non_snake_case, unused_variables)]
pub fn EOI(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::EOI, |state| state.end_of_input())
}
#[inline]
#[allow(dead_code, non_snake_case, unused_variables)]
pub fn SOI(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.start_of_input()
}
}
pub use self::visible::*;
}
::pest::state(input, |state| match rule {
Rule::range_set => rules::range_set(state),
Rule::logical_or => rules::logical_or(state),
Rule::range => rules::range(state),
Rule::empty => rules::empty(state),
Rule::hyphen => rules::hyphen(state),
Rule::simple => rules::simple(state),
Rule::primitive => rules::primitive(state),
Rule::primitive_op => rules::primitive_op(state),
Rule::partial => rules::partial(state),
Rule::xr => rules::xr(state),
Rule::xr_op => rules::xr_op(state),
Rule::nr => rules::nr(state),
Rule::tilde => rules::tilde(state),
Rule::caret => rules::caret(state),
Rule::qualifier => rules::qualifier(state),
Rule::parts => rules::parts(state),
Rule::part => rules::part(state),
Rule::space => rules::space(state),
Rule::EOI => rules::EOI(state),
})
}
}
@@ -0,0 +1,5127 @@
fn takes_a_long_time_to_rustfmt() {
let inner_cte = vec![Node {
node: Some(node::Node::CommonTableExpr(Box::new(CommonTableExpr {
ctename: String::from("ranked_by_age_within_key"),
aliascolnames: vec![],
ctematerialized: CteMaterialize::Default as i32,
ctequery: Some(Box::new(Node {
node: Some(node::Node::SelectStmt(Box::new(SelectStmt {
distinct_clause: vec![],
into_clause: None,
target_list: vec![
Node {
node: Some(node::Node::ResTarget(Box::new(ResTarget {
name: String::from(""),
indirection: vec![],
val: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::AStar(AStar{}))
}],
location: 80
}))
})),
location: 80
})))
},
Node {
node: Some(node::Node::ResTarget(Box::new(ResTarget {
name: String::from("rank_in_key"),
indirection: vec![],
val: Some(Box::new(Node {
node: Some(node::Node::FuncCall(Box::new(FuncCall {
funcname: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("row_number")
}))
}],
args: vec![],
agg_order: vec![],
agg_filter: None,
agg_within_group: false,
agg_star: false,
agg_distinct: false,
func_variadic: false,
over: Some(Box::new(WindowDef {
name: String::from(""),
refname: String::from(""),
partition_clause: vec![
Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("synthetic_key")
}))
}], location: 123
}))
}], order_clause: vec![Node {
node: Some(node::Node::SortBy(Box::new(SortBy {
node: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("logical_timestamp")
}))
}], location: 156
}))
})),
sortby_dir: SortByDir::SortbyDesc as i32,
sortby_nulls: SortByNulls::SortbyNullsDefault as i32,
use_op: vec![],
location: -1
})))
}], frame_options: 1058, start_offset: None, end_offset: None, location: 109
})),
location: 91
})))
})),
location: 91
})))
}],
from_clause: vec![Node {
node: Some(node::Node::RangeVar(RangeVar {
catalogname: String::from(""), schemaname: String::from("_supertables"), relname: String::from("9999-9999-9999"), inh: true, relpersistence: String::from("p"), alias: None, location: 206
}))
}],
where_clause: Some(Box::new(Node {
node: Some(node::Node::AExpr(Box::new(AExpr {
kind: AExprKind::AexprOp as i32,
name: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("<=")
}))
}],
lexpr: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("logical_timestamp")
}))
}],
location: 250
}))
})),
rexpr: Some(Box::new(Node {
node: Some(node::Node::AConst(Box::new(AConst {
val: Some(Box::new(Node {
node: Some(node::Node::Integer(Integer {
ival: 9000
}))
})),
location: 271
})))
})),
location: 268
})))
})),
group_clause: vec![],
having_clause: None,
window_clause: vec![],
values_lists: vec![],
sort_clause: vec![],
limit_offset: None,
limit_count: None,
limit_option: LimitOption::Default as i32,
locking_clause: vec![],
with_clause: None,
op: SetOperation::SetopNone as i32,
all: false,
larg: None,
rarg: None
}))),
})),
location: 29,
cterecursive: false,
cterefcount: 0,
ctecolnames: vec![],
ctecoltypes: vec![],
ctecoltypmods: vec![],
ctecolcollations: vec![],
}))),
}];
let outer_cte = vec![Node {
node: Some(node::Node::CommonTableExpr(Box::new(CommonTableExpr {
ctename: String::from("table_name"),
aliascolnames: vec![],
ctematerialized: CteMaterialize::Default as i32,
ctequery: Some(Box::new(Node {
node: Some(node::Node::SelectStmt(Box::new(SelectStmt {
distinct_clause: vec![],
into_clause: None,
target_list: vec![
Node {
node: Some(node::Node::ResTarget(Box::new(ResTarget {
name: String::from("column1"),
indirection: vec![],
val: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("c1"),
})),
}],
location: 301,
})),
})),
location: 301,
}))),
},
Node {
node: Some(node::Node::ResTarget(Box::new(ResTarget {
name: String::from("column2"),
indirection: vec![],
val: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("c2"),
})),
}],
location: 324,
})),
})),
location: 324,
}))),
},
],
from_clause: vec![Node {
node: Some(node::Node::RangeVar(RangeVar {
catalogname: String::from(""),
schemaname: String::from(""),
relname: String::from("ranked_by_age_within_key"),
inh: true,
relpersistence: String::from("p"),
alias: None,
location: 347,
})),
}],
where_clause: Some(Box::new(Node {
node: Some(node::Node::BoolExpr(Box::new(BoolExpr {
xpr: None,
boolop: BoolExprType::AndExpr as i32,
args: vec![
Node {
node: Some(node::Node::AExpr(Box::new(AExpr {
kind: AExprKind::AexprOp as i32,
name: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("="),
})),
}],
lexpr: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(
String2 {
str: String::from("rank_in_key"),
},
)),
}],
location: 382,
})),
})),
rexpr: Some(Box::new(Node {
node: Some(node::Node::AConst(Box::new(AConst {
val: Some(Box::new(Node {
node: Some(node::Node::Integer(
Integer { ival: 1 },
)),
})),
location: 396,
}))),
})),
location: 394,
}))),
},
Node {
node: Some(node::Node::AExpr(Box::new(AExpr {
kind: AExprKind::AexprOp as i32,
name: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("="),
})),
}],
lexpr: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(
String2 {
str: String::from("is_deleted"),
},
)),
}],
location: 402,
})),
})),
rexpr: Some(Box::new(Node {
node: Some(node::Node::TypeCast(Box::new(
TypeCast {
arg: Some(Box::new(Node {
node: Some(node::Node::AConst(
Box::new(AConst {
val: Some(Box::new(Node {
node: Some(
node::Node::String(
String2 {
str:
String::from(
"f",
),
},
),
),
})),
location: 415,
}),
)),
})),
type_name: Some(TypeName {
names: vec![
Node {
node: Some(node::Node::String(
String2 {
str: String::from(
"pg_catalog",
),
},
)),
},
Node {
node: Some(node::Node::String(
String2 {
str: String::from(
"bool",
),
},
)),
},
],
type_oid: 0,
setof: false,
pct_type: false,
typmods: vec![],
typemod: -1,
array_bounds: vec![],
location: -1,
}),
location: -1,
},
))),
})),
location: 413,
}))),
},
],
location: 398,
}))),
})),
group_clause: vec![],
having_clause: None,
window_clause: vec![],
values_lists: vec![],
sort_clause: vec![],
limit_offset: None,
limit_count: None,
limit_option: LimitOption::Default as i32,
locking_clause: vec![],
with_clause: Some(WithClause {
ctes: inner_cte,
recursive: false,
location: 24,
}),
op: SetOperation::SetopNone as i32,
all: false,
larg: None,
rarg: None,
}))),
})),
location: 5,
cterecursive: false,
cterefcount: 0,
ctecolnames: vec![],
ctecoltypes: vec![],
ctecoltypmods: vec![],
ctecolcollations: vec![],
}))),
}];
let expected_result = ParseResult {
version: 130003,
stmts: vec![RawStmt {
stmt: Some(Box::new(Node {
node: Some(node::Node::SelectStmt(Box::new(SelectStmt {
distinct_clause: vec![],
into_clause: None,
target_list: vec![Node {
node: Some(node::Node::ResTarget(Box::new(ResTarget {
name: String::from(""),
indirection: vec![],
val: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("column1"),
})),
}],
location: 430,
})),
})),
location: 430,
}))),
}],
from_clause: vec![Node {
node: Some(node::Node::RangeVar(RangeVar {
catalogname: String::from(""),
schemaname: String::from(""),
relname: String::from("table_name"),
inh: true,
relpersistence: String::from("p"),
alias: None,
location: 443,
})),
}],
where_clause: Some(Box::new(Node {
node: Some(node::Node::AExpr(Box::new(AExpr {
kind: AExprKind::AexprOp as i32,
name: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from(">"),
})),
}],
lexpr: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("column2"),
})),
}],
location: 460,
})),
})),
rexpr: Some(Box::new(Node {
node: Some(node::Node::AConst(Box::new(AConst {
val: Some(Box::new(Node {
node: Some(node::Node::Integer(Integer {
ival: 9000,
})),
})),
location: 470,
}))),
})),
location: 468,
}))),
})),
group_clause: vec![],
having_clause: None,
window_clause: vec![],
values_lists: vec![],
sort_clause: vec![],
limit_offset: None,
limit_count: None,
limit_option: LimitOption::Default as i32,
locking_clause: vec![],
with_clause: Some(WithClause {
ctes: outer_cte,
recursive: false,
location: 0,
}),
op: SetOperation::SetopNone as i32,
all: false,
larg: None,
rarg: None,
}))),
})),
stmt_location: 0,
stmt_len: 0,
}],
};
}
#[derive(Clone, PartialEq)]
pub struct ParseResult {
pub version: i32,
pub stmts: Vec<RawStmt>,
}
#[derive(Clone, PartialEq)]
pub struct ScanResult {
pub version: i32,
pub tokens: Vec<ScanToken>,
}
#[derive(Clone, PartialEq)]
pub struct Node {
pub node: ::core::option::Option<node::Node>,
}
/// Nested message and enum types in `Node`.
pub mod node {
#[derive(Clone, PartialEq)]
pub enum Node {
Alias(super::Alias),
RangeVar(super::RangeVar),
TableFunc(Box<super::TableFunc>),
Expr(super::Expr),
Var(Box<super::Var>),
Param(Box<super::Param>),
Aggref(Box<super::Aggref>),
GroupingFunc(Box<super::GroupingFunc>),
WindowFunc(Box<super::WindowFunc>),
SubscriptingRef(Box<super::SubscriptingRef>),
FuncExpr(Box<super::FuncExpr>),
NamedArgExpr(Box<super::NamedArgExpr>),
OpExpr(Box<super::OpExpr>),
DistinctExpr(Box<super::DistinctExpr>),
NullIfExpr(Box<super::NullIfExpr>),
ScalarArrayOpExpr(Box<super::ScalarArrayOpExpr>),
BoolExpr(Box<super::BoolExpr>),
SubLink(Box<super::SubLink>),
SubPlan(Box<super::SubPlan>),
AlternativeSubPlan(Box<super::AlternativeSubPlan>),
FieldSelect(Box<super::FieldSelect>),
FieldStore(Box<super::FieldStore>),
RelabelType(Box<super::RelabelType>),
CoerceViaIo(Box<super::CoerceViaIo>),
ArrayCoerceExpr(Box<super::ArrayCoerceExpr>),
ConvertRowtypeExpr(Box<super::ConvertRowtypeExpr>),
CollateExpr(Box<super::CollateExpr>),
CaseExpr(Box<super::CaseExpr>),
CaseWhen(Box<super::CaseWhen>),
CaseTestExpr(Box<super::CaseTestExpr>),
ArrayExpr(Box<super::ArrayExpr>),
RowExpr(Box<super::RowExpr>),
RowCompareExpr(Box<super::RowCompareExpr>),
CoalesceExpr(Box<super::CoalesceExpr>),
MinMaxExpr(Box<super::MinMaxExpr>),
SqlvalueFunction(Box<super::SqlValueFunction>),
XmlExpr(Box<super::XmlExpr>),
NullTest(Box<super::NullTest>),
BooleanTest(Box<super::BooleanTest>),
CoerceToDomain(Box<super::CoerceToDomain>),
CoerceToDomainValue(Box<super::CoerceToDomainValue>),
SetToDefault(Box<super::SetToDefault>),
CurrentOfExpr(Box<super::CurrentOfExpr>),
NextValueExpr(Box<super::NextValueExpr>),
InferenceElem(Box<super::InferenceElem>),
TargetEntry(Box<super::TargetEntry>),
RangeTblRef(super::RangeTblRef),
JoinExpr(Box<super::JoinExpr>),
FromExpr(Box<super::FromExpr>),
OnConflictExpr(Box<super::OnConflictExpr>),
IntoClause(Box<super::IntoClause>),
RawStmt(Box<super::RawStmt>),
Query(Box<super::Query>),
InsertStmt(Box<super::InsertStmt>),
DeleteStmt(Box<super::DeleteStmt>),
UpdateStmt(Box<super::UpdateStmt>),
SelectStmt(Box<super::SelectStmt>),
AlterTableStmt(super::AlterTableStmt),
AlterTableCmd(Box<super::AlterTableCmd>),
AlterDomainStmt(Box<super::AlterDomainStmt>),
SetOperationStmt(Box<super::SetOperationStmt>),
GrantStmt(super::GrantStmt),
GrantRoleStmt(super::GrantRoleStmt),
AlterDefaultPrivilegesStmt(super::AlterDefaultPrivilegesStmt),
ClosePortalStmt(super::ClosePortalStmt),
ClusterStmt(super::ClusterStmt),
CopyStmt(Box<super::CopyStmt>),
CreateStmt(super::CreateStmt),
DefineStmt(super::DefineStmt),
DropStmt(super::DropStmt),
TruncateStmt(super::TruncateStmt),
CommentStmt(Box<super::CommentStmt>),
FetchStmt(super::FetchStmt),
IndexStmt(Box<super::IndexStmt>),
CreateFunctionStmt(super::CreateFunctionStmt),
AlterFunctionStmt(super::AlterFunctionStmt),
DoStmt(super::DoStmt),
RenameStmt(Box<super::RenameStmt>),
RuleStmt(Box<super::RuleStmt>),
NotifyStmt(super::NotifyStmt),
ListenStmt(super::ListenStmt),
UnlistenStmt(super::UnlistenStmt),
TransactionStmt(super::TransactionStmt),
ViewStmt(Box<super::ViewStmt>),
LoadStmt(super::LoadStmt),
CreateDomainStmt(Box<super::CreateDomainStmt>),
CreatedbStmt(super::CreatedbStmt),
DropdbStmt(super::DropdbStmt),
VacuumStmt(super::VacuumStmt),
ExplainStmt(Box<super::ExplainStmt>),
CreateTableAsStmt(Box<super::CreateTableAsStmt>),
CreateSeqStmt(super::CreateSeqStmt),
AlterSeqStmt(super::AlterSeqStmt),
VariableSetStmt(super::VariableSetStmt),
VariableShowStmt(super::VariableShowStmt),
DiscardStmt(super::DiscardStmt),
CreateTrigStmt(Box<super::CreateTrigStmt>),
CreatePlangStmt(super::CreatePLangStmt),
CreateRoleStmt(super::CreateRoleStmt),
AlterRoleStmt(super::AlterRoleStmt),
DropRoleStmt(super::DropRoleStmt),
LockStmt(super::LockStmt),
ConstraintsSetStmt(super::ConstraintsSetStmt),
ReindexStmt(super::ReindexStmt),
CheckPointStmt(super::CheckPointStmt),
CreateSchemaStmt(super::CreateSchemaStmt),
AlterDatabaseStmt(super::AlterDatabaseStmt),
AlterDatabaseSetStmt(super::AlterDatabaseSetStmt),
AlterRoleSetStmt(super::AlterRoleSetStmt),
CreateConversionStmt(super::CreateConversionStmt),
CreateCastStmt(super::CreateCastStmt),
CreateOpClassStmt(super::CreateOpClassStmt),
CreateOpFamilyStmt(super::CreateOpFamilyStmt),
AlterOpFamilyStmt(super::AlterOpFamilyStmt),
PrepareStmt(Box<super::PrepareStmt>),
ExecuteStmt(super::ExecuteStmt),
DeallocateStmt(super::DeallocateStmt),
DeclareCursorStmt(Box<super::DeclareCursorStmt>),
CreateTableSpaceStmt(super::CreateTableSpaceStmt),
DropTableSpaceStmt(super::DropTableSpaceStmt),
AlterObjectDependsStmt(Box<super::AlterObjectDependsStmt>),
AlterObjectSchemaStmt(Box<super::AlterObjectSchemaStmt>),
AlterOwnerStmt(Box<super::AlterOwnerStmt>),
AlterOperatorStmt(super::AlterOperatorStmt),
AlterTypeStmt(super::AlterTypeStmt),
DropOwnedStmt(super::DropOwnedStmt),
ReassignOwnedStmt(super::ReassignOwnedStmt),
CompositeTypeStmt(super::CompositeTypeStmt),
CreateEnumStmt(super::CreateEnumStmt),
CreateRangeStmt(super::CreateRangeStmt),
AlterEnumStmt(super::AlterEnumStmt),
AlterTsdictionaryStmt(super::AlterTsDictionaryStmt),
AlterTsconfigurationStmt(super::AlterTsConfigurationStmt),
CreateFdwStmt(super::CreateFdwStmt),
AlterFdwStmt(super::AlterFdwStmt),
CreateForeignServerStmt(super::CreateForeignServerStmt),
AlterForeignServerStmt(super::AlterForeignServerStmt),
CreateUserMappingStmt(super::CreateUserMappingStmt),
AlterUserMappingStmt(super::AlterUserMappingStmt),
DropUserMappingStmt(super::DropUserMappingStmt),
AlterTableSpaceOptionsStmt(super::AlterTableSpaceOptionsStmt),
AlterTableMoveAllStmt(super::AlterTableMoveAllStmt),
SecLabelStmt(Box<super::SecLabelStmt>),
CreateForeignTableStmt(super::CreateForeignTableStmt),
ImportForeignSchemaStmt(super::ImportForeignSchemaStmt),
CreateExtensionStmt(super::CreateExtensionStmt),
AlterExtensionStmt(super::AlterExtensionStmt),
AlterExtensionContentsStmt(Box<super::AlterExtensionContentsStmt>),
CreateEventTrigStmt(super::CreateEventTrigStmt),
AlterEventTrigStmt(super::AlterEventTrigStmt),
RefreshMatViewStmt(super::RefreshMatViewStmt),
ReplicaIdentityStmt(super::ReplicaIdentityStmt),
AlterSystemStmt(super::AlterSystemStmt),
CreatePolicyStmt(Box<super::CreatePolicyStmt>),
AlterPolicyStmt(Box<super::AlterPolicyStmt>),
CreateTransformStmt(super::CreateTransformStmt),
CreateAmStmt(super::CreateAmStmt),
CreatePublicationStmt(super::CreatePublicationStmt),
AlterPublicationStmt(super::AlterPublicationStmt),
CreateSubscriptionStmt(super::CreateSubscriptionStmt),
AlterSubscriptionStmt(super::AlterSubscriptionStmt),
DropSubscriptionStmt(super::DropSubscriptionStmt),
CreateStatsStmt(super::CreateStatsStmt),
AlterCollationStmt(super::AlterCollationStmt),
CallStmt(Box<super::CallStmt>),
AlterStatsStmt(super::AlterStatsStmt),
AExpr(Box<super::AExpr>),
ColumnRef(super::ColumnRef),
ParamRef(super::ParamRef),
AConst(Box<super::AConst>),
FuncCall(Box<super::FuncCall>),
AStar(super::AStar),
AIndices(Box<super::AIndices>),
AIndirection(Box<super::AIndirection>),
AArrayExpr(super::AArrayExpr),
ResTarget(Box<super::ResTarget>),
MultiAssignRef(Box<super::MultiAssignRef>),
TypeCast(Box<super::TypeCast>),
CollateClause(Box<super::CollateClause>),
SortBy(Box<super::SortBy>),
WindowDef(Box<super::WindowDef>),
RangeSubselect(Box<super::RangeSubselect>),
RangeFunction(super::RangeFunction),
RangeTableSample(Box<super::RangeTableSample>),
RangeTableFunc(Box<super::RangeTableFunc>),
RangeTableFuncCol(Box<super::RangeTableFuncCol>),
TypeName(super::TypeName),
ColumnDef(Box<super::ColumnDef>),
IndexElem(Box<super::IndexElem>),
Constraint(Box<super::Constraint>),
DefElem(Box<super::DefElem>),
RangeTblEntry(Box<super::RangeTblEntry>),
RangeTblFunction(Box<super::RangeTblFunction>),
TableSampleClause(Box<super::TableSampleClause>),
WithCheckOption(Box<super::WithCheckOption>),
SortGroupClause(super::SortGroupClause),
GroupingSet(super::GroupingSet),
WindowClause(Box<super::WindowClause>),
ObjectWithArgs(super::ObjectWithArgs),
AccessPriv(super::AccessPriv),
CreateOpClassItem(super::CreateOpClassItem),
TableLikeClause(super::TableLikeClause),
FunctionParameter(Box<super::FunctionParameter>),
LockingClause(super::LockingClause),
RowMarkClause(super::RowMarkClause),
XmlSerialize(Box<super::XmlSerialize>),
WithClause(super::WithClause),
InferClause(Box<super::InferClause>),
OnConflictClause(Box<super::OnConflictClause>),
CommonTableExpr(Box<super::CommonTableExpr>),
RoleSpec(super::RoleSpec),
TriggerTransition(super::TriggerTransition),
PartitionElem(Box<super::PartitionElem>),
PartitionSpec(super::PartitionSpec),
PartitionBoundSpec(super::PartitionBoundSpec),
PartitionRangeDatum(Box<super::PartitionRangeDatum>),
PartitionCmd(super::PartitionCmd),
VacuumRelation(super::VacuumRelation),
InlineCodeBlock(super::InlineCodeBlock),
CallContext(super::CallContext),
Integer(super::Integer),
Float(super::Float),
String(super::String2),
BitString(super::BitString),
Null(super::Null),
List(super::List),
IntList(super::IntList),
OidList(super::OidList),
}
}
#[derive(Clone, PartialEq)]
pub struct Integer {
/// machine integer
pub ival: i32,
}
#[derive(Clone, PartialEq)]
pub struct Float {
/// string
pub str: String,
}
#[derive(Clone, PartialEq)]
pub struct String2 {
/// string
pub str: String,
}
#[derive(Clone, PartialEq)]
pub struct BitString {
/// string
pub str: String,
}
/// intentionally empty
#[derive(Clone, PartialEq)]
pub struct Null {}
#[derive(Clone, PartialEq)]
pub struct List {
pub items: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct OidList {
pub items: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct IntList {
pub items: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct Alias {
pub aliasname: String,
pub colnames: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct RangeVar {
pub catalogname: String,
pub schemaname: String,
pub relname: String,
pub inh: bool,
pub relpersistence: String,
pub alias: ::core::option::Option<Alias>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct TableFunc {
pub ns_uris: Vec<Node>,
pub ns_names: Vec<Node>,
pub docexpr: ::core::option::Option<Box<Node>>,
pub rowexpr: ::core::option::Option<Box<Node>>,
pub colnames: Vec<Node>,
pub coltypes: Vec<Node>,
pub coltypmods: Vec<Node>,
pub colcollations: Vec<Node>,
pub colexprs: Vec<Node>,
pub coldefexprs: Vec<Node>,
pub notnulls: Vec<u64>,
pub ordinalitycol: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct Expr {}
#[derive(Clone, PartialEq)]
pub struct Var {
pub xpr: ::core::option::Option<Box<Node>>,
pub varno: u32,
pub varattno: i32,
pub vartype: u32,
pub vartypmod: i32,
pub varcollid: u32,
pub varlevelsup: u32,
pub varnosyn: u32,
pub varattnosyn: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct Param {
pub xpr: ::core::option::Option<Box<Node>>,
pub paramkind: i32,
pub paramid: i32,
pub paramtype: u32,
pub paramtypmod: i32,
pub paramcollid: u32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct Aggref {
pub xpr: ::core::option::Option<Box<Node>>,
pub aggfnoid: u32,
pub aggtype: u32,
pub aggcollid: u32,
pub inputcollid: u32,
pub aggtranstype: u32,
pub aggargtypes: Vec<Node>,
pub aggdirectargs: Vec<Node>,
pub args: Vec<Node>,
pub aggorder: Vec<Node>,
pub aggdistinct: Vec<Node>,
pub aggfilter: ::core::option::Option<Box<Node>>,
pub aggstar: bool,
pub aggvariadic: bool,
pub aggkind: String,
pub agglevelsup: u32,
pub aggsplit: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct GroupingFunc {
pub xpr: ::core::option::Option<Box<Node>>,
pub args: Vec<Node>,
pub refs: Vec<Node>,
pub cols: Vec<Node>,
pub agglevelsup: u32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct WindowFunc {
pub xpr: ::core::option::Option<Box<Node>>,
pub winfnoid: u32,
pub wintype: u32,
pub wincollid: u32,
pub inputcollid: u32,
pub args: Vec<Node>,
pub aggfilter: ::core::option::Option<Box<Node>>,
pub winref: u32,
pub winstar: bool,
pub winagg: bool,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct SubscriptingRef {
pub xpr: ::core::option::Option<Box<Node>>,
pub refcontainertype: u32,
pub refelemtype: u32,
pub reftypmod: i32,
pub refcollid: u32,
pub refupperindexpr: Vec<Node>,
pub reflowerindexpr: Vec<Node>,
pub refexpr: ::core::option::Option<Box<Node>>,
pub refassgnexpr: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct FuncExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub funcid: u32,
pub funcresulttype: u32,
pub funcretset: bool,
pub funcvariadic: bool,
pub funcformat: i32,
pub funccollid: u32,
pub inputcollid: u32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct NamedArgExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub name: String,
pub argnumber: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct OpExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub opno: u32,
pub opfuncid: u32,
pub opresulttype: u32,
pub opretset: bool,
pub opcollid: u32,
pub inputcollid: u32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct DistinctExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub opno: u32,
pub opfuncid: u32,
pub opresulttype: u32,
pub opretset: bool,
pub opcollid: u32,
pub inputcollid: u32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct NullIfExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub opno: u32,
pub opfuncid: u32,
pub opresulttype: u32,
pub opretset: bool,
pub opcollid: u32,
pub inputcollid: u32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ScalarArrayOpExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub opno: u32,
pub opfuncid: u32,
pub use_or: bool,
pub inputcollid: u32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct BoolExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub boolop: i32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct SubLink {
pub xpr: ::core::option::Option<Box<Node>>,
pub sub_link_type: i32,
pub sub_link_id: i32,
pub testexpr: ::core::option::Option<Box<Node>>,
pub oper_name: Vec<Node>,
pub subselect: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct SubPlan {
pub xpr: ::core::option::Option<Box<Node>>,
pub sub_link_type: i32,
pub testexpr: ::core::option::Option<Box<Node>>,
pub param_ids: Vec<Node>,
pub plan_id: i32,
pub plan_name: String,
pub first_col_type: u32,
pub first_col_typmod: i32,
pub first_col_collation: u32,
pub use_hash_table: bool,
pub unknown_eq_false: bool,
pub parallel_safe: bool,
pub set_param: Vec<Node>,
pub par_param: Vec<Node>,
pub args: Vec<Node>,
pub startup_cost: f64,
pub per_call_cost: f64,
}
#[derive(Clone, PartialEq)]
pub struct AlternativeSubPlan {
pub xpr: ::core::option::Option<Box<Node>>,
pub subplans: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct FieldSelect {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub fieldnum: i32,
pub resulttype: u32,
pub resulttypmod: i32,
pub resultcollid: u32,
}
#[derive(Clone, PartialEq)]
pub struct FieldStore {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub newvals: Vec<Node>,
pub fieldnums: Vec<Node>,
pub resulttype: u32,
}
#[derive(Clone, PartialEq)]
pub struct RelabelType {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub resulttype: u32,
pub resulttypmod: i32,
pub resultcollid: u32,
pub relabelformat: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CoerceViaIo {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub resulttype: u32,
pub resultcollid: u32,
pub coerceformat: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ArrayCoerceExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub elemexpr: ::core::option::Option<Box<Node>>,
pub resulttype: u32,
pub resulttypmod: i32,
pub resultcollid: u32,
pub coerceformat: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ConvertRowtypeExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub resulttype: u32,
pub convertformat: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CollateExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub coll_oid: u32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CaseExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub casetype: u32,
pub casecollid: u32,
pub arg: ::core::option::Option<Box<Node>>,
pub args: Vec<Node>,
pub defresult: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CaseWhen {
pub xpr: ::core::option::Option<Box<Node>>,
pub expr: ::core::option::Option<Box<Node>>,
pub result: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CaseTestExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub type_id: u32,
pub type_mod: i32,
pub collation: u32,
}
#[derive(Clone, PartialEq)]
pub struct ArrayExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub array_typeid: u32,
pub array_collid: u32,
pub element_typeid: u32,
pub elements: Vec<Node>,
pub multidims: bool,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct RowExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub args: Vec<Node>,
pub row_typeid: u32,
pub row_format: i32,
pub colnames: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct RowCompareExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub rctype: i32,
pub opnos: Vec<Node>,
pub opfamilies: Vec<Node>,
pub inputcollids: Vec<Node>,
pub largs: Vec<Node>,
pub rargs: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CoalesceExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub coalescetype: u32,
pub coalescecollid: u32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct MinMaxExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub minmaxtype: u32,
pub minmaxcollid: u32,
pub inputcollid: u32,
pub op: i32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct SqlValueFunction {
pub xpr: ::core::option::Option<Box<Node>>,
pub op: i32,
pub r#type: u32,
pub typmod: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct XmlExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub op: i32,
pub name: String,
pub named_args: Vec<Node>,
pub arg_names: Vec<Node>,
pub args: Vec<Node>,
pub xmloption: i32,
pub r#type: u32,
pub typmod: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct NullTest {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub nulltesttype: i32,
pub argisrow: bool,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct BooleanTest {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub booltesttype: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CoerceToDomain {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub resulttype: u32,
pub resulttypmod: i32,
pub resultcollid: u32,
pub coercionformat: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CoerceToDomainValue {
pub xpr: ::core::option::Option<Box<Node>>,
pub type_id: u32,
pub type_mod: i32,
pub collation: u32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct SetToDefault {
pub xpr: ::core::option::Option<Box<Node>>,
pub type_id: u32,
pub type_mod: i32,
pub collation: u32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CurrentOfExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub cvarno: u32,
pub cursor_name: String,
pub cursor_param: i32,
}
#[derive(Clone, PartialEq)]
pub struct NextValueExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub seqid: u32,
pub type_id: u32,
}
#[derive(Clone, PartialEq)]
pub struct InferenceElem {
pub xpr: ::core::option::Option<Box<Node>>,
pub expr: ::core::option::Option<Box<Node>>,
pub infercollid: u32,
pub inferopclass: u32,
}
#[derive(Clone, PartialEq)]
pub struct TargetEntry {
pub xpr: ::core::option::Option<Box<Node>>,
pub expr: ::core::option::Option<Box<Node>>,
pub resno: i32,
pub resname: String,
pub ressortgroupref: u32,
pub resorigtbl: u32,
pub resorigcol: i32,
pub resjunk: bool,
}
#[derive(Clone, PartialEq)]
pub struct RangeTblRef {
pub rtindex: i32,
}
#[derive(Clone, PartialEq)]
pub struct JoinExpr {
pub jointype: i32,
pub is_natural: bool,
pub larg: ::core::option::Option<Box<Node>>,
pub rarg: ::core::option::Option<Box<Node>>,
pub using_clause: Vec<Node>,
pub quals: ::core::option::Option<Box<Node>>,
pub alias: ::core::option::Option<Alias>,
pub rtindex: i32,
}
#[derive(Clone, PartialEq)]
pub struct FromExpr {
pub fromlist: Vec<Node>,
pub quals: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct OnConflictExpr {
pub action: i32,
pub arbiter_elems: Vec<Node>,
pub arbiter_where: ::core::option::Option<Box<Node>>,
pub constraint: u32,
pub on_conflict_set: Vec<Node>,
pub on_conflict_where: ::core::option::Option<Box<Node>>,
pub excl_rel_index: i32,
pub excl_rel_tlist: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct IntoClause {
pub rel: ::core::option::Option<RangeVar>,
pub col_names: Vec<Node>,
pub access_method: String,
pub options: Vec<Node>,
pub on_commit: i32,
pub table_space_name: String,
pub view_query: ::core::option::Option<Box<Node>>,
pub skip_data: bool,
}
#[derive(Clone, PartialEq)]
pub struct RawStmt {
pub stmt: ::core::option::Option<Box<Node>>,
pub stmt_location: i32,
pub stmt_len: i32,
}
#[derive(Clone, PartialEq)]
pub struct Query {
pub command_type: i32,
pub query_source: i32,
pub can_set_tag: bool,
pub utility_stmt: ::core::option::Option<Box<Node>>,
pub result_relation: i32,
pub has_aggs: bool,
pub has_window_funcs: bool,
pub has_target_srfs: bool,
pub has_sub_links: bool,
pub has_distinct_on: bool,
pub has_recursive: bool,
pub has_modifying_cte: bool,
pub has_for_update: bool,
pub has_row_security: bool,
pub cte_list: Vec<Node>,
pub rtable: Vec<Node>,
pub jointree: ::core::option::Option<Box<FromExpr>>,
pub target_list: Vec<Node>,
pub r#override: i32,
pub on_conflict: ::core::option::Option<Box<OnConflictExpr>>,
pub returning_list: Vec<Node>,
pub group_clause: Vec<Node>,
pub grouping_sets: Vec<Node>,
pub having_qual: ::core::option::Option<Box<Node>>,
pub window_clause: Vec<Node>,
pub distinct_clause: Vec<Node>,
pub sort_clause: Vec<Node>,
pub limit_offset: ::core::option::Option<Box<Node>>,
pub limit_count: ::core::option::Option<Box<Node>>,
pub limit_option: i32,
pub row_marks: Vec<Node>,
pub set_operations: ::core::option::Option<Box<Node>>,
pub constraint_deps: Vec<Node>,
pub with_check_options: Vec<Node>,
pub stmt_location: i32,
pub stmt_len: i32,
}
#[derive(Clone, PartialEq)]
pub struct InsertStmt {
pub relation: ::core::option::Option<RangeVar>,
pub cols: Vec<Node>,
pub select_stmt: ::core::option::Option<Box<Node>>,
pub on_conflict_clause: ::core::option::Option<Box<OnConflictClause>>,
pub returning_list: Vec<Node>,
pub with_clause: ::core::option::Option<WithClause>,
pub r#override: i32,
}
#[derive(Clone, PartialEq)]
pub struct DeleteStmt {
pub relation: ::core::option::Option<RangeVar>,
pub using_clause: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
pub returning_list: Vec<Node>,
pub with_clause: ::core::option::Option<WithClause>,
}
#[derive(Clone, PartialEq)]
pub struct UpdateStmt {
pub relation: ::core::option::Option<RangeVar>,
pub target_list: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
pub from_clause: Vec<Node>,
pub returning_list: Vec<Node>,
pub with_clause: ::core::option::Option<WithClause>,
}
#[derive(Clone, PartialEq)]
pub struct SelectStmt {
pub distinct_clause: Vec<Node>,
pub into_clause: ::core::option::Option<Box<IntoClause>>,
pub target_list: Vec<Node>,
pub from_clause: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
pub group_clause: Vec<Node>,
pub having_clause: ::core::option::Option<Box<Node>>,
pub window_clause: Vec<Node>,
pub values_lists: Vec<Node>,
pub sort_clause: Vec<Node>,
pub limit_offset: ::core::option::Option<Box<Node>>,
pub limit_count: ::core::option::Option<Box<Node>>,
pub limit_option: i32,
pub locking_clause: Vec<Node>,
pub with_clause: ::core::option::Option<WithClause>,
pub op: i32,
pub all: bool,
pub larg: ::core::option::Option<Box<SelectStmt>>,
pub rarg: ::core::option::Option<Box<SelectStmt>>,
}
#[derive(Clone, PartialEq)]
pub struct AlterTableStmt {
pub relation: ::core::option::Option<RangeVar>,
pub cmds: Vec<Node>,
pub relkind: i32,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterTableCmd {
pub subtype: i32,
pub name: String,
pub num: i32,
pub newowner: ::core::option::Option<RoleSpec>,
pub def: ::core::option::Option<Box<Node>>,
pub behavior: i32,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterDomainStmt {
pub subtype: String,
pub type_name: Vec<Node>,
pub name: String,
pub def: ::core::option::Option<Box<Node>>,
pub behavior: i32,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct SetOperationStmt {
pub op: i32,
pub all: bool,
pub larg: ::core::option::Option<Box<Node>>,
pub rarg: ::core::option::Option<Box<Node>>,
pub col_types: Vec<Node>,
pub col_typmods: Vec<Node>,
pub col_collations: Vec<Node>,
pub group_clauses: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct GrantStmt {
pub is_grant: bool,
pub targtype: i32,
pub objtype: i32,
pub objects: Vec<Node>,
pub privileges: Vec<Node>,
pub grantees: Vec<Node>,
pub grant_option: bool,
pub behavior: i32,
}
#[derive(Clone, PartialEq)]
pub struct GrantRoleStmt {
pub granted_roles: Vec<Node>,
pub grantee_roles: Vec<Node>,
pub is_grant: bool,
pub admin_opt: bool,
pub grantor: ::core::option::Option<RoleSpec>,
pub behavior: i32,
}
#[derive(Clone, PartialEq)]
pub struct AlterDefaultPrivilegesStmt {
pub options: Vec<Node>,
pub action: ::core::option::Option<GrantStmt>,
}
#[derive(Clone, PartialEq)]
pub struct ClosePortalStmt {
pub portalname: String,
}
#[derive(Clone, PartialEq)]
pub struct ClusterStmt {
pub relation: ::core::option::Option<RangeVar>,
pub indexname: String,
pub options: i32,
}
#[derive(Clone, PartialEq)]
pub struct CopyStmt {
pub relation: ::core::option::Option<RangeVar>,
pub query: ::core::option::Option<Box<Node>>,
pub attlist: Vec<Node>,
pub is_from: bool,
pub is_program: bool,
pub filename: String,
pub options: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct CreateStmt {
pub relation: ::core::option::Option<RangeVar>,
pub table_elts: Vec<Node>,
pub inh_relations: Vec<Node>,
pub partbound: ::core::option::Option<PartitionBoundSpec>,
pub partspec: ::core::option::Option<PartitionSpec>,
pub of_typename: ::core::option::Option<TypeName>,
pub constraints: Vec<Node>,
pub options: Vec<Node>,
pub oncommit: i32,
pub tablespacename: String,
pub access_method: String,
pub if_not_exists: bool,
}
#[derive(Clone, PartialEq)]
pub struct DefineStmt {
pub kind: i32,
pub oldstyle: bool,
pub defnames: Vec<Node>,
pub args: Vec<Node>,
pub definition: Vec<Node>,
pub if_not_exists: bool,
pub replace: bool,
}
#[derive(Clone, PartialEq)]
pub struct DropStmt {
pub objects: Vec<Node>,
pub remove_type: i32,
pub behavior: i32,
pub missing_ok: bool,
pub concurrent: bool,
}
#[derive(Clone, PartialEq)]
pub struct TruncateStmt {
pub relations: Vec<Node>,
pub restart_seqs: bool,
pub behavior: i32,
}
#[derive(Clone, PartialEq)]
pub struct CommentStmt {
pub objtype: i32,
pub object: ::core::option::Option<Box<Node>>,
pub comment: String,
}
#[derive(Clone, PartialEq)]
pub struct FetchStmt {
pub direction: i32,
pub how_many: i64,
pub portalname: String,
pub ismove: bool,
}
#[derive(Clone, PartialEq)]
pub struct IndexStmt {
pub idxname: String,
pub relation: ::core::option::Option<RangeVar>,
pub access_method: String,
pub table_space: String,
pub index_params: Vec<Node>,
pub index_including_params: Vec<Node>,
pub options: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
pub exclude_op_names: Vec<Node>,
pub idxcomment: String,
pub index_oid: u32,
pub old_node: u32,
pub old_create_subid: u32,
pub old_first_relfilenode_subid: u32,
pub unique: bool,
pub primary: bool,
pub isconstraint: bool,
pub deferrable: bool,
pub initdeferred: bool,
pub transformed: bool,
pub concurrent: bool,
pub if_not_exists: bool,
pub reset_default_tblspc: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateFunctionStmt {
pub is_procedure: bool,
pub replace: bool,
pub funcname: Vec<Node>,
pub parameters: Vec<Node>,
pub return_type: ::core::option::Option<TypeName>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterFunctionStmt {
pub objtype: i32,
pub func: ::core::option::Option<ObjectWithArgs>,
pub actions: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DoStmt {
pub args: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct RenameStmt {
pub rename_type: i32,
pub relation_type: i32,
pub relation: ::core::option::Option<RangeVar>,
pub object: ::core::option::Option<Box<Node>>,
pub subname: String,
pub newname: String,
pub behavior: i32,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct RuleStmt {
pub relation: ::core::option::Option<RangeVar>,
pub rulename: String,
pub where_clause: ::core::option::Option<Box<Node>>,
pub event: i32,
pub instead: bool,
pub actions: Vec<Node>,
pub replace: bool,
}
#[derive(Clone, PartialEq)]
pub struct NotifyStmt {
pub conditionname: String,
pub payload: String,
}
#[derive(Clone, PartialEq)]
pub struct ListenStmt {
pub conditionname: String,
}
#[derive(Clone, PartialEq)]
pub struct UnlistenStmt {
pub conditionname: String,
}
#[derive(Clone, PartialEq)]
pub struct TransactionStmt {
pub kind: i32,
pub options: Vec<Node>,
pub savepoint_name: String,
pub gid: String,
pub chain: bool,
}
#[derive(Clone, PartialEq)]
pub struct ViewStmt {
pub view: ::core::option::Option<RangeVar>,
pub aliases: Vec<Node>,
pub query: ::core::option::Option<Box<Node>>,
pub replace: bool,
pub options: Vec<Node>,
pub with_check_option: i32,
}
#[derive(Clone, PartialEq)]
pub struct LoadStmt {
pub filename: String,
}
#[derive(Clone, PartialEq)]
pub struct CreateDomainStmt {
pub domainname: Vec<Node>,
pub type_name: ::core::option::Option<TypeName>,
pub coll_clause: ::core::option::Option<Box<CollateClause>>,
pub constraints: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreatedbStmt {
pub dbname: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DropdbStmt {
pub dbname: String,
pub missing_ok: bool,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct VacuumStmt {
pub options: Vec<Node>,
pub rels: Vec<Node>,
pub is_vacuumcmd: bool,
}
#[derive(Clone, PartialEq)]
pub struct ExplainStmt {
pub query: ::core::option::Option<Box<Node>>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreateTableAsStmt {
pub query: ::core::option::Option<Box<Node>>,
pub into: ::core::option::Option<Box<IntoClause>>,
pub relkind: i32,
pub is_select_into: bool,
pub if_not_exists: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateSeqStmt {
pub sequence: ::core::option::Option<RangeVar>,
pub options: Vec<Node>,
pub owner_id: u32,
pub for_identity: bool,
pub if_not_exists: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterSeqStmt {
pub sequence: ::core::option::Option<RangeVar>,
pub options: Vec<Node>,
pub for_identity: bool,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct VariableSetStmt {
pub kind: i32,
pub name: String,
pub args: Vec<Node>,
pub is_local: bool,
}
#[derive(Clone, PartialEq)]
pub struct VariableShowStmt {
pub name: String,
}
#[derive(Clone, PartialEq)]
pub struct DiscardStmt {
pub target: i32,
}
#[derive(Clone, PartialEq)]
pub struct CreateTrigStmt {
pub trigname: String,
pub relation: ::core::option::Option<RangeVar>,
pub funcname: Vec<Node>,
pub args: Vec<Node>,
pub row: bool,
pub timing: i32,
pub events: i32,
pub columns: Vec<Node>,
pub when_clause: ::core::option::Option<Box<Node>>,
pub isconstraint: bool,
pub transition_rels: Vec<Node>,
pub deferrable: bool,
pub initdeferred: bool,
pub constrrel: ::core::option::Option<RangeVar>,
}
#[derive(Clone, PartialEq)]
pub struct CreatePLangStmt {
pub replace: bool,
pub plname: String,
pub plhandler: Vec<Node>,
pub plinline: Vec<Node>,
pub plvalidator: Vec<Node>,
pub pltrusted: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateRoleStmt {
pub stmt_type: i32,
pub role: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterRoleStmt {
pub role: ::core::option::Option<RoleSpec>,
pub options: Vec<Node>,
pub action: i32,
}
#[derive(Clone, PartialEq)]
pub struct DropRoleStmt {
pub roles: Vec<Node>,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct LockStmt {
pub relations: Vec<Node>,
pub mode: i32,
pub nowait: bool,
}
#[derive(Clone, PartialEq)]
pub struct ConstraintsSetStmt {
pub constraints: Vec<Node>,
pub deferred: bool,
}
#[derive(Clone, PartialEq)]
pub struct ReindexStmt {
pub kind: i32,
pub relation: ::core::option::Option<RangeVar>,
pub name: String,
pub options: i32,
pub concurrent: bool,
}
#[derive(Clone, PartialEq)]
pub struct CheckPointStmt {}
#[derive(Clone, PartialEq)]
pub struct CreateSchemaStmt {
pub schemaname: String,
pub authrole: ::core::option::Option<RoleSpec>,
pub schema_elts: Vec<Node>,
pub if_not_exists: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterDatabaseStmt {
pub dbname: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterDatabaseSetStmt {
pub dbname: String,
pub setstmt: ::core::option::Option<VariableSetStmt>,
}
#[derive(Clone, PartialEq)]
pub struct AlterRoleSetStmt {
pub role: ::core::option::Option<RoleSpec>,
pub database: String,
pub setstmt: ::core::option::Option<VariableSetStmt>,
}
#[derive(Clone, PartialEq)]
pub struct CreateConversionStmt {
pub conversion_name: Vec<Node>,
pub for_encoding_name: String,
pub to_encoding_name: String,
pub func_name: Vec<Node>,
pub def: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateCastStmt {
pub sourcetype: ::core::option::Option<TypeName>,
pub targettype: ::core::option::Option<TypeName>,
pub func: ::core::option::Option<ObjectWithArgs>,
pub context: i32,
pub inout: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateOpClassStmt {
pub opclassname: Vec<Node>,
pub opfamilyname: Vec<Node>,
pub amname: String,
pub datatype: ::core::option::Option<TypeName>,
pub items: Vec<Node>,
pub is_default: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateOpFamilyStmt {
pub opfamilyname: Vec<Node>,
pub amname: String,
}
#[derive(Clone, PartialEq)]
pub struct AlterOpFamilyStmt {
pub opfamilyname: Vec<Node>,
pub amname: String,
pub is_drop: bool,
pub items: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct PrepareStmt {
pub name: String,
pub argtypes: Vec<Node>,
pub query: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct ExecuteStmt {
pub name: String,
pub params: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DeallocateStmt {
pub name: String,
}
#[derive(Clone, PartialEq)]
pub struct DeclareCursorStmt {
pub portalname: String,
pub options: i32,
pub query: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct CreateTableSpaceStmt {
pub tablespacename: String,
pub owner: ::core::option::Option<RoleSpec>,
pub location: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DropTableSpaceStmt {
pub tablespacename: String,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterObjectDependsStmt {
pub object_type: i32,
pub relation: ::core::option::Option<RangeVar>,
pub object: ::core::option::Option<Box<Node>>,
pub extname: ::core::option::Option<Box<Node>>,
pub remove: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterObjectSchemaStmt {
pub object_type: i32,
pub relation: ::core::option::Option<RangeVar>,
pub object: ::core::option::Option<Box<Node>>,
pub newschema: String,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterOwnerStmt {
pub object_type: i32,
pub relation: ::core::option::Option<RangeVar>,
pub object: ::core::option::Option<Box<Node>>,
pub newowner: ::core::option::Option<RoleSpec>,
}
#[derive(Clone, PartialEq)]
pub struct AlterOperatorStmt {
pub opername: ::core::option::Option<ObjectWithArgs>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterTypeStmt {
pub type_name: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DropOwnedStmt {
pub roles: Vec<Node>,
pub behavior: i32,
}
#[derive(Clone, PartialEq)]
pub struct ReassignOwnedStmt {
pub roles: Vec<Node>,
pub newrole: ::core::option::Option<RoleSpec>,
}
#[derive(Clone, PartialEq)]
pub struct CompositeTypeStmt {
pub typevar: ::core::option::Option<RangeVar>,
pub coldeflist: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreateEnumStmt {
pub type_name: Vec<Node>,
pub vals: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreateRangeStmt {
pub type_name: Vec<Node>,
pub params: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterEnumStmt {
pub type_name: Vec<Node>,
pub old_val: String,
pub new_val: String,
pub new_val_neighbor: String,
pub new_val_is_after: bool,
pub skip_if_new_val_exists: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterTsDictionaryStmt {
pub dictname: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterTsConfigurationStmt {
pub kind: i32,
pub cfgname: Vec<Node>,
pub tokentype: Vec<Node>,
pub dicts: Vec<Node>,
pub r#override: bool,
pub replace: bool,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateFdwStmt {
pub fdwname: String,
pub func_options: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterFdwStmt {
pub fdwname: String,
pub func_options: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreateForeignServerStmt {
pub servername: String,
pub servertype: String,
pub version: String,
pub fdwname: String,
pub if_not_exists: bool,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterForeignServerStmt {
pub servername: String,
pub version: String,
pub options: Vec<Node>,
pub has_version: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateUserMappingStmt {
pub user: ::core::option::Option<RoleSpec>,
pub servername: String,
pub if_not_exists: bool,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterUserMappingStmt {
pub user: ::core::option::Option<RoleSpec>,
pub servername: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DropUserMappingStmt {
pub user: ::core::option::Option<RoleSpec>,
pub servername: String,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterTableSpaceOptionsStmt {
pub tablespacename: String,
pub options: Vec<Node>,
pub is_reset: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterTableMoveAllStmt {
pub orig_tablespacename: String,
pub objtype: i32,
pub roles: Vec<Node>,
pub new_tablespacename: String,
pub nowait: bool,
}
#[derive(Clone, PartialEq)]
pub struct SecLabelStmt {
pub objtype: i32,
pub object: ::core::option::Option<Box<Node>>,
pub provider: String,
pub label: String,
}
#[derive(Clone, PartialEq)]
pub struct CreateForeignTableStmt {
pub base_stmt: ::core::option::Option<CreateStmt>,
pub servername: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct ImportForeignSchemaStmt {
pub server_name: String,
pub remote_schema: String,
pub local_schema: String,
pub list_type: i32,
pub table_list: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreateExtensionStmt {
pub extname: String,
pub if_not_exists: bool,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterExtensionStmt {
pub extname: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterExtensionContentsStmt {
pub extname: String,
pub action: i32,
pub objtype: i32,
pub object: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct CreateEventTrigStmt {
pub trigname: String,
pub eventname: String,
pub whenclause: Vec<Node>,
pub funcname: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterEventTrigStmt {
pub trigname: String,
pub tgenabled: String,
}
#[derive(Clone, PartialEq)]
pub struct RefreshMatViewStmt {
pub concurrent: bool,
pub skip_data: bool,
pub relation: ::core::option::Option<RangeVar>,
}
#[derive(Clone, PartialEq)]
pub struct ReplicaIdentityStmt {
pub identity_type: String,
pub name: String,
}
#[derive(Clone, PartialEq)]
pub struct AlterSystemStmt {
pub setstmt: ::core::option::Option<VariableSetStmt>,
}
#[derive(Clone, PartialEq)]
pub struct CreatePolicyStmt {
pub policy_name: String,
pub table: ::core::option::Option<RangeVar>,
pub cmd_name: String,
pub permissive: bool,
pub roles: Vec<Node>,
pub qual: ::core::option::Option<Box<Node>>,
pub with_check: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct AlterPolicyStmt {
pub policy_name: String,
pub table: ::core::option::Option<RangeVar>,
pub roles: Vec<Node>,
pub qual: ::core::option::Option<Box<Node>>,
pub with_check: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct CreateTransformStmt {
pub replace: bool,
pub type_name: ::core::option::Option<TypeName>,
pub lang: String,
pub fromsql: ::core::option::Option<ObjectWithArgs>,
pub tosql: ::core::option::Option<ObjectWithArgs>,
}
#[derive(Clone, PartialEq)]
pub struct CreateAmStmt {
pub amname: String,
pub handler_name: Vec<Node>,
pub amtype: String,
}
#[derive(Clone, PartialEq)]
pub struct CreatePublicationStmt {
pub pubname: String,
pub options: Vec<Node>,
pub tables: Vec<Node>,
pub for_all_tables: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterPublicationStmt {
pub pubname: String,
pub options: Vec<Node>,
pub tables: Vec<Node>,
pub for_all_tables: bool,
pub table_action: i32,
}
#[derive(Clone, PartialEq)]
pub struct CreateSubscriptionStmt {
pub subname: String,
pub conninfo: String,
pub publication: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterSubscriptionStmt {
pub kind: i32,
pub subname: String,
pub conninfo: String,
pub publication: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DropSubscriptionStmt {
pub subname: String,
pub missing_ok: bool,
pub behavior: i32,
}
#[derive(Clone, PartialEq)]
pub struct CreateStatsStmt {
pub defnames: Vec<Node>,
pub stat_types: Vec<Node>,
pub exprs: Vec<Node>,
pub relations: Vec<Node>,
pub stxcomment: String,
pub if_not_exists: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterCollationStmt {
pub collname: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CallStmt {
pub funccall: ::core::option::Option<Box<FuncCall>>,
pub funcexpr: ::core::option::Option<Box<FuncExpr>>,
}
#[derive(Clone, PartialEq)]
pub struct AlterStatsStmt {
pub defnames: Vec<Node>,
pub stxstattarget: i32,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct AExpr {
pub kind: i32,
pub name: Vec<Node>,
pub lexpr: ::core::option::Option<Box<Node>>,
pub rexpr: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ColumnRef {
pub fields: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ParamRef {
pub number: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct AConst {
pub val: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct FuncCall {
pub funcname: Vec<Node>,
pub args: Vec<Node>,
pub agg_order: Vec<Node>,
pub agg_filter: ::core::option::Option<Box<Node>>,
pub agg_within_group: bool,
pub agg_star: bool,
pub agg_distinct: bool,
pub func_variadic: bool,
pub over: ::core::option::Option<Box<WindowDef>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct AStar {}
#[derive(Clone, PartialEq)]
pub struct AIndices {
pub is_slice: bool,
pub lidx: ::core::option::Option<Box<Node>>,
pub uidx: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct AIndirection {
pub arg: ::core::option::Option<Box<Node>>,
pub indirection: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AArrayExpr {
pub elements: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ResTarget {
pub name: String,
pub indirection: Vec<Node>,
pub val: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct MultiAssignRef {
pub source: ::core::option::Option<Box<Node>>,
pub colno: i32,
pub ncolumns: i32,
}
#[derive(Clone, PartialEq)]
pub struct TypeCast {
pub arg: ::core::option::Option<Box<Node>>,
pub type_name: ::core::option::Option<TypeName>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CollateClause {
pub arg: ::core::option::Option<Box<Node>>,
pub collname: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct SortBy {
pub node: ::core::option::Option<Box<Node>>,
pub sortby_dir: i32,
pub sortby_nulls: i32,
pub use_op: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct WindowDef {
pub name: String,
pub refname: String,
pub partition_clause: Vec<Node>,
pub order_clause: Vec<Node>,
pub frame_options: i32,
pub start_offset: ::core::option::Option<Box<Node>>,
pub end_offset: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct RangeSubselect {
pub lateral: bool,
pub subquery: ::core::option::Option<Box<Node>>,
pub alias: ::core::option::Option<Alias>,
}
#[derive(Clone, PartialEq)]
pub struct RangeFunction {
pub lateral: bool,
pub ordinality: bool,
pub is_rowsfrom: bool,
pub functions: Vec<Node>,
pub alias: ::core::option::Option<Alias>,
pub coldeflist: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct RangeTableSample {
pub relation: ::core::option::Option<Box<Node>>,
pub method: Vec<Node>,
pub args: Vec<Node>,
pub repeatable: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct RangeTableFunc {
pub lateral: bool,
pub docexpr: ::core::option::Option<Box<Node>>,
pub rowexpr: ::core::option::Option<Box<Node>>,
pub namespaces: Vec<Node>,
pub columns: Vec<Node>,
pub alias: ::core::option::Option<Alias>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct RangeTableFuncCol {
pub colname: String,
pub type_name: ::core::option::Option<TypeName>,
pub for_ordinality: bool,
pub is_not_null: bool,
pub colexpr: ::core::option::Option<Box<Node>>,
pub coldefexpr: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct TypeName {
pub names: Vec<Node>,
pub type_oid: u32,
pub setof: bool,
pub pct_type: bool,
pub typmods: Vec<Node>,
pub typemod: i32,
pub array_bounds: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ColumnDef {
pub colname: String,
pub type_name: ::core::option::Option<TypeName>,
pub inhcount: i32,
pub is_local: bool,
pub is_not_null: bool,
pub is_from_type: bool,
pub storage: String,
pub raw_default: ::core::option::Option<Box<Node>>,
pub cooked_default: ::core::option::Option<Box<Node>>,
pub identity: String,
pub identity_sequence: ::core::option::Option<RangeVar>,
pub generated: String,
pub coll_clause: ::core::option::Option<Box<CollateClause>>,
pub coll_oid: u32,
pub constraints: Vec<Node>,
pub fdwoptions: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct IndexElem {
pub name: String,
pub expr: ::core::option::Option<Box<Node>>,
pub indexcolname: String,
pub collation: Vec<Node>,
pub opclass: Vec<Node>,
pub opclassopts: Vec<Node>,
pub ordering: i32,
pub nulls_ordering: i32,
}
#[derive(Clone, PartialEq)]
pub struct Constraint {
pub contype: i32,
pub conname: String,
pub deferrable: bool,
pub initdeferred: bool,
pub location: i32,
pub is_no_inherit: bool,
pub raw_expr: ::core::option::Option<Box<Node>>,
pub cooked_expr: String,
pub generated_when: String,
pub keys: Vec<Node>,
pub including: Vec<Node>,
pub exclusions: Vec<Node>,
pub options: Vec<Node>,
pub indexname: String,
pub indexspace: String,
pub reset_default_tblspc: bool,
pub access_method: String,
pub where_clause: ::core::option::Option<Box<Node>>,
pub pktable: ::core::option::Option<RangeVar>,
pub fk_attrs: Vec<Node>,
pub pk_attrs: Vec<Node>,
pub fk_matchtype: String,
pub fk_upd_action: String,
pub fk_del_action: String,
pub old_conpfeqop: Vec<Node>,
pub old_pktable_oid: u32,
pub skip_validation: bool,
pub initially_valid: bool,
}
#[derive(Clone, PartialEq)]
pub struct DefElem {
pub defnamespace: String,
pub defname: String,
pub arg: ::core::option::Option<Box<Node>>,
pub defaction: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct RangeTblEntry {
pub rtekind: i32,
pub relid: u32,
pub relkind: String,
pub rellockmode: i32,
pub tablesample: ::core::option::Option<Box<TableSampleClause>>,
pub subquery: ::core::option::Option<Box<Query>>,
pub security_barrier: bool,
pub jointype: i32,
pub joinmergedcols: i32,
pub joinaliasvars: Vec<Node>,
pub joinleftcols: Vec<Node>,
pub joinrightcols: Vec<Node>,
pub functions: Vec<Node>,
pub funcordinality: bool,
pub tablefunc: ::core::option::Option<Box<TableFunc>>,
pub values_lists: Vec<Node>,
pub ctename: String,
pub ctelevelsup: u32,
pub self_reference: bool,
pub coltypes: Vec<Node>,
pub coltypmods: Vec<Node>,
pub colcollations: Vec<Node>,
pub enrname: String,
pub enrtuples: f64,
pub alias: ::core::option::Option<Alias>,
pub eref: ::core::option::Option<Alias>,
pub lateral: bool,
pub inh: bool,
pub in_from_cl: bool,
pub required_perms: u32,
pub check_as_user: u32,
pub selected_cols: Vec<u64>,
pub inserted_cols: Vec<u64>,
pub updated_cols: Vec<u64>,
pub extra_updated_cols: Vec<u64>,
pub security_quals: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct RangeTblFunction {
pub funcexpr: ::core::option::Option<Box<Node>>,
pub funccolcount: i32,
pub funccolnames: Vec<Node>,
pub funccoltypes: Vec<Node>,
pub funccoltypmods: Vec<Node>,
pub funccolcollations: Vec<Node>,
pub funcparams: Vec<u64>,
}
#[derive(Clone, PartialEq)]
pub struct TableSampleClause {
pub tsmhandler: u32,
pub args: Vec<Node>,
pub repeatable: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct WithCheckOption {
pub kind: i32,
pub relname: String,
pub polname: String,
pub qual: ::core::option::Option<Box<Node>>,
pub cascaded: bool,
}
#[derive(Clone, PartialEq)]
pub struct SortGroupClause {
pub tle_sort_group_ref: u32,
pub eqop: u32,
pub sortop: u32,
pub nulls_first: bool,
pub hashable: bool,
}
#[derive(Clone, PartialEq)]
pub struct GroupingSet {
pub kind: i32,
pub content: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct WindowClause {
pub name: String,
pub refname: String,
pub partition_clause: Vec<Node>,
pub order_clause: Vec<Node>,
pub frame_options: i32,
pub start_offset: ::core::option::Option<Box<Node>>,
pub end_offset: ::core::option::Option<Box<Node>>,
pub start_in_range_func: u32,
pub end_in_range_func: u32,
pub in_range_coll: u32,
pub in_range_asc: bool,
pub in_range_nulls_first: bool,
pub winref: u32,
pub copied_order: bool,
}
#[derive(Clone, PartialEq)]
pub struct ObjectWithArgs {
pub objname: Vec<Node>,
pub objargs: Vec<Node>,
pub args_unspecified: bool,
}
#[derive(Clone, PartialEq)]
pub struct AccessPriv {
pub priv_name: String,
pub cols: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreateOpClassItem {
pub itemtype: i32,
pub name: ::core::option::Option<ObjectWithArgs>,
pub number: i32,
pub order_family: Vec<Node>,
pub class_args: Vec<Node>,
pub storedtype: ::core::option::Option<TypeName>,
}
#[derive(Clone, PartialEq)]
pub struct TableLikeClause {
pub relation: ::core::option::Option<RangeVar>,
pub options: u32,
pub relation_oid: u32,
}
#[derive(Clone, PartialEq)]
pub struct FunctionParameter {
pub name: String,
pub arg_type: ::core::option::Option<TypeName>,
pub mode: i32,
pub defexpr: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct LockingClause {
pub locked_rels: Vec<Node>,
pub strength: i32,
pub wait_policy: i32,
}
#[derive(Clone, PartialEq)]
pub struct RowMarkClause {
pub rti: u32,
pub strength: i32,
pub wait_policy: i32,
pub pushed_down: bool,
}
#[derive(Clone, PartialEq)]
pub struct XmlSerialize {
pub xmloption: i32,
pub expr: ::core::option::Option<Box<Node>>,
pub type_name: ::core::option::Option<TypeName>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct WithClause {
pub ctes: Vec<Node>,
pub recursive: bool,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct InferClause {
pub index_elems: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
pub conname: String,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct OnConflictClause {
pub action: i32,
pub infer: ::core::option::Option<Box<InferClause>>,
pub target_list: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CommonTableExpr {
pub ctename: String,
pub aliascolnames: Vec<Node>,
pub ctematerialized: i32,
pub ctequery: ::core::option::Option<Box<Node>>,
pub location: i32,
pub cterecursive: bool,
pub cterefcount: i32,
pub ctecolnames: Vec<Node>,
pub ctecoltypes: Vec<Node>,
pub ctecoltypmods: Vec<Node>,
pub ctecolcollations: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct RoleSpec {
pub roletype: i32,
pub rolename: String,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct TriggerTransition {
pub name: String,
pub is_new: bool,
pub is_table: bool,
}
#[derive(Clone, PartialEq)]
pub struct PartitionElem {
pub name: String,
pub expr: ::core::option::Option<Box<Node>>,
pub collation: Vec<Node>,
pub opclass: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct PartitionSpec {
pub strategy: String,
pub part_params: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct PartitionBoundSpec {
pub strategy: String,
pub is_default: bool,
pub modulus: i32,
pub remainder: i32,
pub listdatums: Vec<Node>,
pub lowerdatums: Vec<Node>,
pub upperdatums: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct PartitionRangeDatum {
pub kind: i32,
pub value: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct PartitionCmd {
pub name: ::core::option::Option<RangeVar>,
pub bound: ::core::option::Option<PartitionBoundSpec>,
}
#[derive(Clone, PartialEq)]
pub struct VacuumRelation {
pub relation: ::core::option::Option<RangeVar>,
pub oid: u32,
pub va_cols: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct InlineCodeBlock {
pub source_text: String,
pub lang_oid: u32,
pub lang_is_trusted: bool,
pub atomic: bool,
}
#[derive(Clone, PartialEq)]
pub struct CallContext {
pub atomic: bool,
}
#[derive(Clone, PartialEq)]
pub struct ScanToken {
pub start: i32,
pub end: i32,
pub token: i32,
pub keyword_kind: i32,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum OverridingKind {
Undefined = 0,
OverridingNotSet = 1,
OverridingUserValue = 2,
OverridingSystemValue = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum QuerySource {
Undefined = 0,
QsrcOriginal = 1,
QsrcParser = 2,
QsrcInsteadRule = 3,
QsrcQualInsteadRule = 4,
QsrcNonInsteadRule = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SortByDir {
Undefined = 0,
SortbyDefault = 1,
SortbyAsc = 2,
SortbyDesc = 3,
SortbyUsing = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SortByNulls {
Undefined = 0,
SortbyNullsDefault = 1,
SortbyNullsFirst = 2,
SortbyNullsLast = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum AExprKind {
Undefined = 0,
AexprOp = 1,
AexprOpAny = 2,
AexprOpAll = 3,
AexprDistinct = 4,
AexprNotDistinct = 5,
AexprNullif = 6,
AexprOf = 7,
AexprIn = 8,
AexprLike = 9,
AexprIlike = 10,
AexprSimilar = 11,
AexprBetween = 12,
AexprNotBetween = 13,
AexprBetweenSym = 14,
AexprNotBetweenSym = 15,
AexprParen = 16,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum RoleSpecType {
Undefined = 0,
RolespecCstring = 1,
RolespecCurrentUser = 2,
RolespecSessionUser = 3,
RolespecPublic = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum TableLikeOption {
Undefined = 0,
CreateTableLikeComments = 1,
CreateTableLikeConstraints = 2,
CreateTableLikeDefaults = 3,
CreateTableLikeGenerated = 4,
CreateTableLikeIdentity = 5,
CreateTableLikeIndexes = 6,
CreateTableLikeStatistics = 7,
CreateTableLikeStorage = 8,
CreateTableLikeAll = 9,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum DefElemAction {
Undefined = 0,
DefelemUnspec = 1,
DefelemSet = 2,
DefelemAdd = 3,
DefelemDrop = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum PartitionRangeDatumKind {
Undefined = 0,
PartitionRangeDatumMinvalue = 1,
PartitionRangeDatumValue = 2,
PartitionRangeDatumMaxvalue = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum RteKind {
RtekindUndefined = 0,
RteRelation = 1,
RteSubquery = 2,
RteJoin = 3,
RteFunction = 4,
RteTablefunc = 5,
RteValues = 6,
RteCte = 7,
RteNamedtuplestore = 8,
RteResult = 9,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum WcoKind {
WcokindUndefined = 0,
WcoViewCheck = 1,
WcoRlsInsertCheck = 2,
WcoRlsUpdateCheck = 3,
WcoRlsConflictCheck = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum GroupingSetKind {
Undefined = 0,
GroupingSetEmpty = 1,
GroupingSetSimple = 2,
GroupingSetRollup = 3,
GroupingSetCube = 4,
GroupingSetSets = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum CteMaterialize {
CtematerializeUndefined = 0,
Default = 1,
Always = 2,
Never = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SetOperation {
Undefined = 0,
SetopNone = 1,
SetopUnion = 2,
SetopIntersect = 3,
SetopExcept = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ObjectType {
Undefined = 0,
ObjectAccessMethod = 1,
ObjectAggregate = 2,
ObjectAmop = 3,
ObjectAmproc = 4,
ObjectAttribute = 5,
ObjectCast = 6,
ObjectColumn = 7,
ObjectCollation = 8,
ObjectConversion = 9,
ObjectDatabase = 10,
ObjectDefault = 11,
ObjectDefacl = 12,
ObjectDomain = 13,
ObjectDomconstraint = 14,
ObjectEventTrigger = 15,
ObjectExtension = 16,
ObjectFdw = 17,
ObjectForeignServer = 18,
ObjectForeignTable = 19,
ObjectFunction = 20,
ObjectIndex = 21,
ObjectLanguage = 22,
ObjectLargeobject = 23,
ObjectMatview = 24,
ObjectOpclass = 25,
ObjectOperator = 26,
ObjectOpfamily = 27,
ObjectPolicy = 28,
ObjectProcedure = 29,
ObjectPublication = 30,
ObjectPublicationRel = 31,
ObjectRole = 32,
ObjectRoutine = 33,
ObjectRule = 34,
ObjectSchema = 35,
ObjectSequence = 36,
ObjectSubscription = 37,
ObjectStatisticExt = 38,
ObjectTabconstraint = 39,
ObjectTable = 40,
ObjectTablespace = 41,
ObjectTransform = 42,
ObjectTrigger = 43,
ObjectTsconfiguration = 44,
ObjectTsdictionary = 45,
ObjectTsparser = 46,
ObjectTstemplate = 47,
ObjectType = 48,
ObjectUserMapping = 49,
ObjectView = 50,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum DropBehavior {
Undefined = 0,
DropRestrict = 1,
DropCascade = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum AlterTableType {
Undefined = 0,
AtAddColumn = 1,
AtAddColumnRecurse = 2,
AtAddColumnToView = 3,
AtColumnDefault = 4,
AtCookedColumnDefault = 5,
AtDropNotNull = 6,
AtSetNotNull = 7,
AtDropExpression = 8,
AtCheckNotNull = 9,
AtSetStatistics = 10,
AtSetOptions = 11,
AtResetOptions = 12,
AtSetStorage = 13,
AtDropColumn = 14,
AtDropColumnRecurse = 15,
AtAddIndex = 16,
AtReAddIndex = 17,
AtAddConstraint = 18,
AtAddConstraintRecurse = 19,
AtReAddConstraint = 20,
AtReAddDomainConstraint = 21,
AtAlterConstraint = 22,
AtValidateConstraint = 23,
AtValidateConstraintRecurse = 24,
AtAddIndexConstraint = 25,
AtDropConstraint = 26,
AtDropConstraintRecurse = 27,
AtReAddComment = 28,
AtAlterColumnType = 29,
AtAlterColumnGenericOptions = 30,
AtChangeOwner = 31,
AtClusterOn = 32,
AtDropCluster = 33,
AtSetLogged = 34,
AtSetUnLogged = 35,
AtDropOids = 36,
AtSetTableSpace = 37,
AtSetRelOptions = 38,
AtResetRelOptions = 39,
AtReplaceRelOptions = 40,
AtEnableTrig = 41,
AtEnableAlwaysTrig = 42,
AtEnableReplicaTrig = 43,
AtDisableTrig = 44,
AtEnableTrigAll = 45,
AtDisableTrigAll = 46,
AtEnableTrigUser = 47,
AtDisableTrigUser = 48,
AtEnableRule = 49,
AtEnableAlwaysRule = 50,
AtEnableReplicaRule = 51,
AtDisableRule = 52,
AtAddInherit = 53,
AtDropInherit = 54,
AtAddOf = 55,
AtDropOf = 56,
AtReplicaIdentity = 57,
AtEnableRowSecurity = 58,
AtDisableRowSecurity = 59,
AtForceRowSecurity = 60,
AtNoForceRowSecurity = 61,
AtGenericOptions = 62,
AtAttachPartition = 63,
AtDetachPartition = 64,
AtAddIdentity = 65,
AtSetIdentity = 66,
AtDropIdentity = 67,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum GrantTargetType {
Undefined = 0,
AclTargetObject = 1,
AclTargetAllInSchema = 2,
AclTargetDefaults = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum VariableSetKind {
Undefined = 0,
VarSetValue = 1,
VarSetDefault = 2,
VarSetCurrent = 3,
VarSetMulti = 4,
VarReset = 5,
VarResetAll = 6,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ConstrType {
Undefined = 0,
ConstrNull = 1,
ConstrNotnull = 2,
ConstrDefault = 3,
ConstrIdentity = 4,
ConstrGenerated = 5,
ConstrCheck = 6,
ConstrPrimary = 7,
ConstrUnique = 8,
ConstrExclusion = 9,
ConstrForeign = 10,
ConstrAttrDeferrable = 11,
ConstrAttrNotDeferrable = 12,
ConstrAttrDeferred = 13,
ConstrAttrImmediate = 14,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ImportForeignSchemaType {
Undefined = 0,
FdwImportSchemaAll = 1,
FdwImportSchemaLimitTo = 2,
FdwImportSchemaExcept = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum RoleStmtType {
Undefined = 0,
RolestmtRole = 1,
RolestmtUser = 2,
RolestmtGroup = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum FetchDirection {
Undefined = 0,
FetchForward = 1,
FetchBackward = 2,
FetchAbsolute = 3,
FetchRelative = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum FunctionParameterMode {
Undefined = 0,
FuncParamIn = 1,
FuncParamOut = 2,
FuncParamInout = 3,
FuncParamVariadic = 4,
FuncParamTable = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum TransactionStmtKind {
Undefined = 0,
TransStmtBegin = 1,
TransStmtStart = 2,
TransStmtCommit = 3,
TransStmtRollback = 4,
TransStmtSavepoint = 5,
TransStmtRelease = 6,
TransStmtRollbackTo = 7,
TransStmtPrepare = 8,
TransStmtCommitPrepared = 9,
TransStmtRollbackPrepared = 10,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ViewCheckOption {
Undefined = 0,
NoCheckOption = 1,
LocalCheckOption = 2,
CascadedCheckOption = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ClusterOption {
Undefined = 0,
CluoptRecheck = 1,
CluoptVerbose = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum DiscardMode {
Undefined = 0,
DiscardAll = 1,
DiscardPlans = 2,
DiscardSequences = 3,
DiscardTemp = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ReindexObjectType {
Undefined = 0,
ReindexObjectIndex = 1,
ReindexObjectTable = 2,
ReindexObjectSchema = 3,
ReindexObjectSystem = 4,
ReindexObjectDatabase = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum AlterTsConfigType {
AlterTsconfigTypeUndefined = 0,
AlterTsconfigAddMapping = 1,
AlterTsconfigAlterMappingForToken = 2,
AlterTsconfigReplaceDict = 3,
AlterTsconfigReplaceDictForToken = 4,
AlterTsconfigDropMapping = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum AlterSubscriptionType {
Undefined = 0,
AlterSubscriptionOptions = 1,
AlterSubscriptionConnection = 2,
AlterSubscriptionPublication = 3,
AlterSubscriptionRefresh = 4,
AlterSubscriptionEnabled = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum OnCommitAction {
Undefined = 0,
OncommitNoop = 1,
OncommitPreserveRows = 2,
OncommitDeleteRows = 3,
OncommitDrop = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ParamKind {
Undefined = 0,
ParamExtern = 1,
ParamExec = 2,
ParamSublink = 3,
ParamMultiexpr = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum CoercionContext {
Undefined = 0,
CoercionImplicit = 1,
CoercionAssignment = 2,
CoercionExplicit = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum CoercionForm {
Undefined = 0,
CoerceExplicitCall = 1,
CoerceExplicitCast = 2,
CoerceImplicitCast = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum BoolExprType {
Undefined = 0,
AndExpr = 1,
OrExpr = 2,
NotExpr = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SubLinkType {
Undefined = 0,
ExistsSublink = 1,
AllSublink = 2,
AnySublink = 3,
RowcompareSublink = 4,
ExprSublink = 5,
MultiexprSublink = 6,
ArraySublink = 7,
CteSublink = 8,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum RowCompareType {
Undefined = 0,
RowcompareLt = 1,
RowcompareLe = 2,
RowcompareEq = 3,
RowcompareGe = 4,
RowcompareGt = 5,
RowcompareNe = 6,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum MinMaxOp {
Undefined = 0,
IsGreatest = 1,
IsLeast = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SqlValueFunctionOp {
SqlvalueFunctionOpUndefined = 0,
SvfopCurrentDate = 1,
SvfopCurrentTime = 2,
SvfopCurrentTimeN = 3,
SvfopCurrentTimestamp = 4,
SvfopCurrentTimestampN = 5,
SvfopLocaltime = 6,
SvfopLocaltimeN = 7,
SvfopLocaltimestamp = 8,
SvfopLocaltimestampN = 9,
SvfopCurrentRole = 10,
SvfopCurrentUser = 11,
SvfopUser = 12,
SvfopSessionUser = 13,
SvfopCurrentCatalog = 14,
SvfopCurrentSchema = 15,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum XmlExprOp {
Undefined = 0,
IsXmlconcat = 1,
IsXmlelement = 2,
IsXmlforest = 3,
IsXmlparse = 4,
IsXmlpi = 5,
IsXmlroot = 6,
IsXmlserialize = 7,
IsDocument = 8,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum XmlOptionType {
Undefined = 0,
XmloptionDocument = 1,
XmloptionContent = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum NullTestType {
Undefined = 0,
IsNull = 1,
IsNotNull = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum BoolTestType {
Undefined = 0,
IsTrue = 1,
IsNotTrue = 2,
IsFalse = 3,
IsNotFalse = 4,
IsUnknown = 5,
IsNotUnknown = 6,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum CmdType {
Undefined = 0,
CmdUnknown = 1,
CmdSelect = 2,
CmdUpdate = 3,
CmdInsert = 4,
CmdDelete = 5,
CmdUtility = 6,
CmdNothing = 7,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum JoinType {
Undefined = 0,
JoinInner = 1,
JoinLeft = 2,
JoinFull = 3,
JoinRight = 4,
JoinSemi = 5,
JoinAnti = 6,
JoinUniqueOuter = 7,
JoinUniqueInner = 8,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum AggStrategy {
Undefined = 0,
AggPlain = 1,
AggSorted = 2,
AggHashed = 3,
AggMixed = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum AggSplit {
Undefined = 0,
AggsplitSimple = 1,
AggsplitInitialSerial = 2,
AggsplitFinalDeserial = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SetOpCmd {
Undefined = 0,
SetopcmdIntersect = 1,
SetopcmdIntersectAll = 2,
SetopcmdExcept = 3,
SetopcmdExceptAll = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SetOpStrategy {
Undefined = 0,
SetopSorted = 1,
SetopHashed = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum OnConflictAction {
Undefined = 0,
OnconflictNone = 1,
OnconflictNothing = 2,
OnconflictUpdate = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum LimitOption {
Undefined = 0,
Default = 1,
Count = 2,
WithTies = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum LockClauseStrength {
Undefined = 0,
LcsNone = 1,
LcsForkeyshare = 2,
LcsForshare = 3,
LcsFornokeyupdate = 4,
LcsForupdate = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum LockWaitPolicy {
Undefined = 0,
LockWaitBlock = 1,
LockWaitSkip = 2,
LockWaitError = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum LockTupleMode {
Undefined = 0,
LockTupleKeyShare = 1,
LockTupleShare = 2,
LockTupleNoKeyExclusive = 3,
LockTupleExclusive = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum KeywordKind {
NoKeyword = 0,
UnreservedKeyword = 1,
ColNameKeyword = 2,
TypeFuncNameKeyword = 3,
ReservedKeyword = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum Token {
Nul = 0,
/// Single-character tokens that are returned 1:1 (identical with "self" list in scan.l)
/// Either supporting syntax, or single-character operators (some can be both)
/// Also see <https://www.postgresql.org/docs/12/sql-syntax-lexical.html#SQL-SYNTAX-SPECIAL-CHARS>
///
/// "%"
Ascii37 = 37,
/// "("
Ascii40 = 40,
/// ")"
Ascii41 = 41,
/// "*"
Ascii42 = 42,
/// "+"
Ascii43 = 43,
/// ","
Ascii44 = 44,
/// "-"
Ascii45 = 45,
/// "."
Ascii46 = 46,
/// "/"
Ascii47 = 47,
/// ":"
Ascii58 = 58,
/// ";"
Ascii59 = 59,
/// "<"
Ascii60 = 60,
/// "="
Ascii61 = 61,
/// ">"
Ascii62 = 62,
/// "?"
Ascii63 = 63,
/// "["
Ascii91 = 91,
/// "\"
Ascii92 = 92,
/// "]"
Ascii93 = 93,
/// "^"
Ascii94 = 94,
/// Named tokens in scan.l
Ident = 258,
Uident = 259,
Fconst = 260,
Sconst = 261,
Usconst = 262,
Bconst = 263,
Xconst = 264,
Op = 265,
Iconst = 266,
Param = 267,
Typecast = 268,
DotDot = 269,
ColonEquals = 270,
EqualsGreater = 271,
LessEquals = 272,
GreaterEquals = 273,
NotEquals = 274,
SqlComment = 275,
CComment = 276,
AbortP = 277,
AbsoluteP = 278,
Access = 279,
Action = 280,
AddP = 281,
Admin = 282,
After = 283,
Aggregate = 284,
All = 285,
Also = 286,
Alter = 287,
Always = 288,
Analyse = 289,
Analyze = 290,
And = 291,
Any = 292,
Array = 293,
As = 294,
Asc = 295,
Assertion = 296,
Assignment = 297,
Asymmetric = 298,
At = 299,
Attach = 300,
Attribute = 301,
Authorization = 302,
Backward = 303,
Before = 304,
BeginP = 305,
Between = 306,
Bigint = 307,
Binary = 308,
Bit = 309,
BooleanP = 310,
Both = 311,
By = 312,
Cache = 313,
Call = 314,
Called = 315,
Cascade = 316,
Cascaded = 317,
Case = 318,
Cast = 319,
CatalogP = 320,
Chain = 321,
CharP = 322,
Character = 323,
Characteristics = 324,
Check = 325,
Checkpoint = 326,
Class = 327,
Close = 328,
Cluster = 329,
Coalesce = 330,
Collate = 331,
Collation = 332,
Column = 333,
Columns = 334,
Comment = 335,
Comments = 336,
Commit = 337,
Committed = 338,
Concurrently = 339,
Configuration = 340,
Conflict = 341,
Connection = 342,
Constraint = 343,
Constraints = 344,
ContentP = 345,
ContinueP = 346,
ConversionP = 347,
Copy = 348,
Cost = 349,
Create = 350,
Cross = 351,
Csv = 352,
Cube = 353,
CurrentP = 354,
CurrentCatalog = 355,
CurrentDate = 356,
CurrentRole = 357,
CurrentSchema = 358,
CurrentTime = 359,
CurrentTimestamp = 360,
CurrentUser = 361,
Cursor = 362,
Cycle = 363,
DataP = 364,
Database = 365,
DayP = 366,
Deallocate = 367,
Dec = 368,
DecimalP = 369,
Declare = 370,
Default = 371,
Defaults = 372,
Deferrable = 373,
Deferred = 374,
Definer = 375,
DeleteP = 376,
Delimiter = 377,
Delimiters = 378,
Depends = 379,
Desc = 380,
Detach = 381,
Dictionary = 382,
DisableP = 383,
Discard = 384,
Distinct = 385,
Do = 386,
DocumentP = 387,
DomainP = 388,
DoubleP = 389,
Drop = 390,
Each = 391,
Else = 392,
EnableP = 393,
Encoding = 394,
Encrypted = 395,
EndP = 396,
EnumP = 397,
Escape = 398,
Event = 399,
Except = 400,
Exclude = 401,
Excluding = 402,
Exclusive = 403,
Execute = 404,
Exists = 405,
Explain = 406,
Expression = 407,
Extension = 408,
External = 409,
Extract = 410,
FalseP = 411,
Family = 412,
Fetch = 413,
Filter = 414,
FirstP = 415,
FloatP = 416,
Following = 417,
For = 418,
Force = 419,
Foreign = 420,
Forward = 421,
Freeze = 422,
From = 423,
Full = 424,
Function = 425,
Functions = 426,
Generated = 427,
Global = 428,
Grant = 429,
Granted = 430,
Greatest = 431,
GroupP = 432,
Grouping = 433,
Groups = 434,
Handler = 435,
Having = 436,
HeaderP = 437,
Hold = 438,
HourP = 439,
IdentityP = 440,
IfP = 441,
Ilike = 442,
Immediate = 443,
Immutable = 444,
ImplicitP = 445,
ImportP = 446,
InP = 447,
Include = 448,
Including = 449,
Increment = 450,
Index = 451,
Indexes = 452,
Inherit = 453,
Inherits = 454,
Initially = 455,
InlineP = 456,
InnerP = 457,
Inout = 458,
InputP = 459,
Insensitive = 460,
Insert = 461,
Instead = 462,
IntP = 463,
Integer = 464,
Intersect = 465,
Interval = 466,
Into = 467,
Invoker = 468,
Is = 469,
Isnull = 470,
Isolation = 471,
Join = 472,
Key = 473,
Label = 474,
Language = 475,
LargeP = 476,
LastP = 477,
LateralP = 478,
Leading = 479,
Leakproof = 480,
Least = 481,
Left = 482,
Level = 483,
Like = 484,
Limit = 485,
Listen = 486,
Load = 487,
Local = 488,
Localtime = 489,
Localtimestamp = 490,
Location = 491,
LockP = 492,
Locked = 493,
Logged = 494,
Mapping = 495,
Match = 496,
Materialized = 497,
Maxvalue = 498,
Method = 499,
MinuteP = 500,
Minvalue = 501,
Mode = 502,
MonthP = 503,
Move = 504,
NameP = 505,
Names = 506,
National = 507,
Natural = 508,
Nchar = 509,
New = 510,
Next = 511,
Nfc = 512,
Nfd = 513,
Nfkc = 514,
Nfkd = 515,
No = 516,
None = 517,
Normalize = 518,
Normalized = 519,
Not = 520,
Nothing = 521,
Notify = 522,
Notnull = 523,
Nowait = 524,
NullP = 525,
Nullif = 526,
NullsP = 527,
Numeric = 528,
ObjectP = 529,
Of = 530,
Off = 531,
Offset = 532,
Oids = 533,
Old = 534,
On = 535,
Only = 536,
Operator = 537,
Option = 538,
Options = 539,
Or = 540,
Order = 541,
Ordinality = 542,
Others = 543,
OutP = 544,
OuterP = 545,
Over = 546,
Overlaps = 547,
Overlay = 548,
Overriding = 549,
Owned = 550,
Owner = 551,
Parallel = 552,
Parser = 553,
Partial = 554,
Partition = 555,
Passing = 556,
Password = 557,
Placing = 558,
Plans = 559,
Policy = 560,
Position = 561,
Preceding = 562,
Precision = 563,
Preserve = 564,
Prepare = 565,
Prepared = 566,
Primary = 567,
Prior = 568,
Privileges = 569,
Procedural = 570,
Procedure = 571,
Procedures = 572,
Program = 573,
Publication = 574,
Quote = 575,
Range = 576,
Read = 577,
Real = 578,
Reassign = 579,
Recheck = 580,
Recursive = 581,
Ref = 582,
References = 583,
Referencing = 584,
Refresh = 585,
Reindex = 586,
RelativeP = 587,
Release = 588,
Rename = 589,
Repeatable = 590,
Replace = 591,
Replica = 592,
Reset = 593,
Restart = 594,
Restrict = 595,
Returning = 596,
Returns = 597,
Revoke = 598,
Right = 599,
Role = 600,
Rollback = 601,
Rollup = 602,
Routine = 603,
Routines = 604,
Row = 605,
Rows = 606,
Rule = 607,
Savepoint = 608,
Schema = 609,
Schemas = 610,
Scroll = 611,
Search = 612,
SecondP = 613,
Security = 614,
Select = 615,
Sequence = 616,
Sequences = 617,
Serializable = 618,
Server = 619,
Session = 620,
SessionUser = 621,
Set = 622,
Sets = 623,
Setof = 624,
Share = 625,
Show = 626,
Similar = 627,
Simple = 628,
Skip = 629,
Smallint = 630,
Snapshot = 631,
Some = 632,
SqlP = 633,
Stable = 634,
StandaloneP = 635,
Start = 636,
Statement = 637,
Statistics = 638,
Stdin = 639,
Stdout = 640,
Storage = 641,
Stored = 642,
StrictP = 643,
StripP = 644,
Subscription = 645,
Substring = 646,
Support = 647,
Symmetric = 648,
Sysid = 649,
SystemP = 650,
Table = 651,
Tables = 652,
Tablesample = 653,
Tablespace = 654,
Temp = 655,
Template = 656,
Temporary = 657,
TextP = 658,
Then = 659,
Ties = 660,
Time = 661,
Timestamp = 662,
To = 663,
Trailing = 664,
Transaction = 665,
Transform = 666,
Treat = 667,
Trigger = 668,
Trim = 669,
TrueP = 670,
Truncate = 671,
Trusted = 672,
TypeP = 673,
TypesP = 674,
Uescape = 675,
Unbounded = 676,
Uncommitted = 677,
Unencrypted = 678,
Union = 679,
Unique = 680,
Unknown = 681,
Unlisten = 682,
Unlogged = 683,
Until = 684,
Update = 685,
User = 686,
Using = 687,
Vacuum = 688,
Valid = 689,
Validate = 690,
Validator = 691,
ValueP = 692,
Values = 693,
Varchar = 694,
Variadic = 695,
Varying = 696,
Verbose = 697,
VersionP = 698,
View = 699,
Views = 700,
Volatile = 701,
When = 702,
Where = 703,
WhitespaceP = 704,
Window = 705,
With = 706,
Within = 707,
Without = 708,
Work = 709,
Wrapper = 710,
Write = 711,
XmlP = 712,
Xmlattributes = 713,
Xmlconcat = 714,
Xmlelement = 715,
Xmlexists = 716,
Xmlforest = 717,
Xmlnamespaces = 718,
Xmlparse = 719,
Xmlpi = 720,
Xmlroot = 721,
Xmlserialize = 722,
Xmltable = 723,
YearP = 724,
YesP = 725,
Zone = 726,
NotLa = 727,
NullsLa = 728,
WithLa = 729,
Postfixop = 730,
Uminus = 731,
}
@@ -0,0 +1,72 @@
// #5215
struct MyTuple(
/// Doc Comments
/* TODO note to add more to Doc Comments */ u32,
/// Doc Comments
// TODO note
u64,
);
struct MyTuple(
#[cfg(unix)] // some comment
u64,
#[cfg(not(unix))] /*block comment */
u32,
);
struct MyTuple(
#[cfg(unix)]
// some comment
u64,
#[cfg(not(unix))]
/*block comment */
u32,
);
struct MyTuple(
#[cfg(unix)] // some comment
pub u64,
#[cfg(not(unix))] /*block comment */
pub(crate) u32,
);
struct MyTuple(
/// Doc Comments
/* TODO note to add more to Doc Comments */
pub u32,
/// Doc Comments
// TODO note
pub(crate) u64,
);
struct MyStruct {
#[cfg(unix)] // some comment
a: u64,
#[cfg(not(unix))] /*block comment */
b: u32,
}
struct MyStruct {
#[cfg(unix)] // some comment
pub a: u64,
#[cfg(not(unix))] /*block comment */
pub(crate) b: u32,
}
struct MyStruct {
/// Doc Comments
/* TODO note to add more to Doc Comments */
a: u32,
/// Doc Comments
// TODO note
b: u64,
}
struct MyStruct {
/// Doc Comments
/* TODO note to add more to Doc Comments */
pub a: u32,
/// Doc Comments
// TODO note
pub(crate) b: u64,
}
@@ -0,0 +1,18 @@
// rustfmt-group_imports: StdExternalCrate
use alloc::alloc::Layout;
use chrono::Utc;
use juniper::{FieldError, FieldResult};
use uuid::Uuid;
use super::update::convert_publish_payload;
extern crate uuid;
use core::f32;
use std::sync::Arc;
use broker::database::PooledConnection;
use super::schema::{Context, Payload};
use crate::models::Event;
@@ -26,3 +26,34 @@
use k::{a, b, c, d};
use l::{a, b, c, d};
use b::q::{self /* After b::q::self */};
use b::r; // After b::r
use b::s::{
a,
b, // After b::s::b
};
use b::t::{/* Before b::t::self */ self};
use b::t::{
// Before b::t::a
a,
b,
};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::{
c, d, e,
u::{a, b},
};
use b::{
f::g,
h::{i, j}, /* After b::h group */
};
use b::{
/* Before b::l group */ l::{self, m, n::o, p::*},
q,
};
@@ -0,0 +1,6 @@
use crate::lexer;
use crate::lexer;
use crate::lexer::tokens::TokenData;
use crate::lexer::tokens::TokenData;
use crate::lexer::{self};
use crate::lexer::{self, tokens::TokenData};
@@ -0,0 +1,7 @@
// rustfmt-imports_granularity: Item
// rustfmt-reorder_imports: false
// rustfmt-group_imports: StdExternalCrate
use crate::lexer;
use crate::lexer::tokens::TokenData;
use crate::lexer::{self};
@@ -0,0 +1,5 @@
// rustfmt-imports_granularity: Item
use crate::lexer;
use crate::lexer::tokens::TokenData;
use crate::lexer::{self};
@@ -0,0 +1,45 @@
// rustfmt-imports_granularity: Item
use a::b;
use a::c;
use a::d;
use a::f::g;
use a::h::i;
use a::h::j;
use a::l::m;
use a::l::n::o;
use a::l::p::*;
use a::l::{self};
use a::q::{self};
use b::c;
use b::d;
use b::e;
use b::q::{self /* After b::q::self */};
use b::r; // After b::r
use b::s::{
a,
b, // After b::s::b
};
use b::t::{/* Before b::t::self */ self};
use b::t::{
// Before b::t::a
a,
b,
};
use b::u::a;
use b::u::b;
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::{
f::g,
h::{i, j}, /* After b::h group */
};
use b::{
/* Before b::l group */ l::{self, m, n::o, p::*},
q,
};
@@ -0,0 +1,55 @@
// rustfmt-imports_granularity: Module
use a::b::c;
use a::d::e;
use a::f;
use a::g::{h, i};
use a::j::k::{self, l};
use a::j::{self, m};
use a::n::o::p;
use a::n::q;
pub use a::r::s;
pub use a::t;
use b::c::d;
use b::{self};
use foo::e;
#[cfg(test)]
use foo::{a::b, c::d};
use bar::{
// comment
a::b,
// more comment
c::d,
e::f,
};
use b::q::{self /* After b::q::self */};
use b::r; // After b::r
use b::s::{
a,
b, // After b::s::b
};
use b::t::{/* Before b::t::self */ self};
use b::t::{
// Before b::t::a
a,
b,
};
use b::u::{a, b};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::{c, d, e};
use b::{
f::g,
h::{i, j}, /* After b::h group */
};
use b::{
/* Before b::l group */ l::{self, m, n::o, p::*},
q,
};
@@ -1,13 +0,0 @@
// rustfmt-imports_granularity: Item
use a::b;
use a::c;
use a::d;
use a::f::g;
use a::h::i;
use a::h::j;
use a::l::m;
use a::l::n::o;
use a::l::p::*;
use a::l::{self};
use a::q::{self};
@@ -1,22 +0,0 @@
// rustfmt-imports_granularity: Module
use a::b::c;
use a::d::e;
use a::f;
use a::g::{h, i};
use a::j::k::{self, l};
use a::j::{self, m};
use a::n::o::p;
use a::n::q;
pub use a::r::s;
pub use a::t;
use b::c::d;
use b::{self};
use foo::e;
#[cfg(test)]
use foo::{a::b, c::d};
use bar::a::b;
use bar::c::d;
use bar::e::f;
@@ -68,12 +68,42 @@
c::{self, ca},
};
use {
a::{
aa::{aaa, aab},
ab,
ac::aca,
ad::ada,
},
b as x,
use a::{
// some comment
aa::{aaa, aab},
ab,
// another comment
ac::aca,
};
use {a::ad::ada, b as x};
use b::q::{self /* After b::q::self */};
use b::r; // After b::r
use b::s::{
a,
b, // After b::s::b
};
use b::t::{/* Before b::t::self */ self};
use b::t::{
// Before b::t::a
a,
b,
};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::{
c, d, e,
u::{a, b},
};
use b::{
f::g,
h::{i, j}, /* After b::h group */
};
use b::{
/* Before b::l group */ l::{self, m, n::o, p::*},
q,
};
@@ -0,0 +1,21 @@
// rustfmt-imports_granularity: Item
// rustfmt-group_imports: One
// Confirm that attributes are duplicated to all items in the use statement
#[cfg(feature = "foo")]
use std::collections::HashMap;
#[cfg(feature = "foo")]
use std::collections::HashSet;
// Separate the imports below from the ones above
const A: usize = 0;
// Copying attrs works with import grouping as well
#[cfg(feature = "spam")]
use qux::bar;
#[cfg(feature = "spam")]
use qux::baz;
#[cfg(feature = "foo")]
use std::collections::HashMap;
#[cfg(feature = "foo")]
use std::collections::HashSet;
@@ -0,0 +1,13 @@
// rustfmt-wrap_comments: true
/// [MyType](VeryLongPathToMyType::NoLineBreak::Here::Okay::ThatWouldBeNice::Thanks)
fn documented_with_longtype() {
// # We're using a long type link, rustfmt should not break line
// on the type when `wrap_comments = true`
}
/// VeryLongPathToMyType::JustMyType::But::VeryVery::Long::NoLineBreak::Here::Okay::ThatWouldBeNice::Thanks
fn documented_with_verylongtype() {
// # We're using a long type link, rustfmt should not break line
// on the type when `wrap_comments = true`
}
@@ -0,0 +1,13 @@
// rustfmt-format_code_in_doc_comments:true
struct Foo {
// a: i32,
//
// b: i32,
}
struct Foo {
a: i32,
//
// b: i32,
}
@@ -0,0 +1,245 @@
// rustmft-version:Two
// rustmft-use_small_heuristics:Max
// rustmft-merge_derives:false
// These are the same rustfmt configuration options that are used
// in the comiler as of ce39461ca75a and 8eb7c58dbb7b
// These are commits in https://github.com/rust-lang/rust
#![no_std] // inner attribute comment
// inner attribute comment
#![no_implicit_prelude]
// post inner attribute comment
#[cfg(not(miri))] // inline comment
#[no_link]
extern crate foo;
// before attributes
#[no_link]
// between attributes
#[cfg(not(miri))] // inline comment
extern crate foo as bar;
#[cfg(not(miri))] // inline comment
// between attribute and use
use foo;
#[cfg(not(miri))] // inline comment
use foo;
/* pre attributre */
#[cfg(not(miri))]
use foo::bar;
#[cfg(not(miri))] // inline comment
use foo::bar as FooBar;
#[cfg(not(miri))] // inline comment
#[allow(unused)]
#[deprecated(
since = "5.2", // inline inner comment
note = "FOO was rarely used. Users should instead use BAR"
)]
#[allow(unused)]
static FOO: i32 = 42;
#[used]
#[export_name = "FOO"]
#[cfg(not(miri))] // inline comment
#[deprecated(
since = "5.2",
note = "FOO was rarely used. Users should instead use BAR"
)]
static FOO: i32 = 42;
#[cfg(not(miri))] // inline comment
#[export_name = "FOO"]
static BAR: &'static str = "bar";
#[cfg(not(miri))] // inline comment
const BAR: i32 = 42;
#[cfg(not(miri))] // inline comment
#[no_mangle]
#[link_section = ".example_section"]
fn foo(bar: usize) {
#[cfg(not(miri))] // inline comment
println!("hello world!");
}
#[cfg(not(miri))] // inline comment
mod foo {}
#[cfg(not(miri))] // inline comment
extern "C" {
fn my_c_function(x: i32) -> bool;
}
#[cfg(not(miri))] // inline comment
#[link(name = "CoreFoundation", kind = "framework")]
extern "C" {
#[link_name = "actual_symbol_name"] // inline comment
// between attribute and function
fn my_c_function(x: i32) -> bool;
}
#[cfg(not(miri))] // inline comment
pub extern "C" fn callable_from_c(x: i32) -> bool {
x % 3 == 0
}
#[cfg(not(miri))] // inline comment
/* between attribute block comment */
#[no_mangle]
/* between attribute and type */
type Foo = Bar<u8>;
#[no_mangle]
#[cfg(not(miri))] // inline comment
#[non_exhaustive] // inline comment
enum Foo {
Bar,
Baz,
}
#[no_mangle]
#[cfg(not(miri))] /* inline comment */
struct Foo<A> {
x: A,
}
#[cfg(not(miri))] // inline comment
union Foo<A, B> {
x: A,
y: B,
}
#[cfg(not(miri))] // inline comment
trait Foo {}
#[cfg(not(miri))] // inline comment
trait Foo = Bar + Quux;
#[cfg(not(miri))] // inline comment
impl Foo {}
#[cfg(not(miri))] // inline comment
macro_rules! bar {
(3) => {};
}
mod nested {
#[cfg(not(miri))] // inline comment
// between attribute and use
use foo;
#[cfg(not(miri))] // inline comment
use foo;
#[cfg(not(miri))] // inline comment
use foo::bar;
#[cfg(not(miri))] // inline comment
use foo::bar as FooBar;
#[cfg(not(miri))] // inline comment
static FOO: i32 = 42;
#[cfg(not(miri))] // inline comment
static FOO: i32 = 42;
#[cfg(not(miri))] // inline comment
static FOO: &'static str = "bar";
#[cfg(not(miri))] // inline comment
const FOO: i32 = 42;
#[cfg(not(miri))] // inline comment
fn foo(bar: usize) {
#[cfg(not(miri))] // inline comment
println!("hello world!");
}
#[cfg(not(miri))] // inline comment
mod foo {}
#[cfg(not(miri))] // inline comment
mod foo {}
#[cfg(not(miri))] // inline comment
extern "C" {
fn my_c_function(x: i32) -> bool;
}
#[cfg(not(miri))] // inline comment
#[link(name = "CoreFoundation", kind = "framework")]
extern "C" {
#[link_name = "actual_symbol_name"] // inline comment
// between attribute and function
fn my_c_function(x: i32) -> bool;
}
#[cfg(not(miri))] // inline comment
pub extern "C" fn callable_from_c(x: i32) -> bool {
x % 3 == 0
}
#[cfg(not(miri))] // inline comment
type Foo = Bar<u8>;
#[cfg(not(miri))] // inline comment
#[non_exhaustive] // inline comment
enum Foo {
// comment
#[attribute_1]
#[attribute_2] // comment
// comment!
Bar,
/* comment */
#[attribute_1]
#[attribute_2] /* comment */
#[attribute_3]
#[attribute_4]
/* comment! */
Baz,
}
#[cfg(not(miri))] // inline comment
struct Foo<A> {
x: A,
}
#[cfg(not(miri))] // inline comment
union Foo<A, B> {
#[attribute_1]
#[attribute_2] /* comment */
#[attribute_3]
#[attribute_4] // comment
x: A,
y: B,
}
#[cfg(not(miri))] // inline comment
#[allow(missing_docs)]
trait Foo {
#[must_use] /* comment
* that wrappes to
* the next line */
fn bar() {}
}
#[allow(missing_docs)]
#[cfg(not(miri))] // inline comment
trait Foo = Bar + Quux;
#[allow(missing_docs)]
#[cfg(not(miri))] // inline comment
impl Foo {}
#[cfg(not(miri))] // inline comment
macro_rules! bar {
(3) => {};
}
}
@@ -1,5 +0,0 @@
// rustfmt-config: issue-3802.toml
fn main() {
println!("Hello world!");
}
@@ -1,6 +0,0 @@
// rustfmt-license_template_path: tests/license-template/lt.txt
// Copyright 2019 The rustfmt developers.
fn main() {
println!("Hello world!");
}
@@ -0,0 +1,705 @@
use super::SemverParser;
#[allow(dead_code, non_camel_case_types)]
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum Rule {
EOI,
range_set,
logical_or,
range,
empty,
hyphen,
simple,
primitive,
primitive_op,
partial,
xr,
xr_op,
nr,
tilde,
caret,
qualifier,
parts,
part,
space,
}
#[allow(clippy::all)]
impl ::pest::Parser<Rule> for SemverParser {
fn parse<'i>(
rule: Rule,
input: &'i str,
) -> ::std::result::Result<::pest::iterators::Pairs<'i, Rule>, ::pest::error::Error<Rule>> {
mod rules {
pub mod hidden {
use super::super::Rule;
#[inline]
#[allow(dead_code, non_snake_case, unused_variables)]
pub fn skip(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
Ok(state)
}
}
pub mod visible {
use super::super::Rule;
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn range_set(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::range_set, |state| {
state.sequence(|state| {
self::SOI(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| self::space(state))
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::range(state))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
state
.sequence(|state| {
self::logical_or(state)
.and_then(|state| {
super::hidden::skip(state)
})
.and_then(|state| self::range(state))
})
.and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(
|state| {
state.sequence(|state| {
self::logical_or(state)
.and_then(|state| {
super::hidden::skip(
state,
)
})
.and_then(|state| {
self::range(state)
})
})
},
)
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| self::space(state))
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::EOI(state))
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn logical_or(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::logical_or, |state| {
state.sequence(|state| {
state
.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| self::space(state))
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| state.match_string("||"))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| self::space(state))
})
})
})
})
})
})
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn range(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::range, |state| {
self::hyphen(state)
.or_else(|state| {
state.sequence(|state| {
self::simple(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
state
.sequence(|state| {
state
.optional(|state| {
state.match_string(",")
})
.and_then(|state| {
super::hidden::skip(state)
})
.and_then(|state| {
state.sequence(|state| {
self::space(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| self::space(state))
})
})
})
})
})
})
})
})
.and_then(|state| {
super::hidden::skip(state)
})
.and_then(|state| {
self::simple(state)
})
})
.and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| {
state.sequence(
|state| {
state
.optional(|state| state.match_string(","))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
self::space(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| self::space(state))
})
})
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::simple(state))
},
)
})
})
})
})
})
})
})
})
})
.or_else(|state| self::empty(state))
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn empty(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::empty, |state| state.match_string(""))
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn hyphen(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::hyphen, |state| {
state.sequence(|state| {
self::partial(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
self::space(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| {
self::space(state)
})
})
})
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| state.match_string("-"))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
self::space(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| {
self::space(state)
})
})
})
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::partial(state))
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn simple(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::simple, |state| {
self::primitive(state)
.or_else(|state| self::partial(state))
.or_else(|state| self::tilde(state))
.or_else(|state| self::caret(state))
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn primitive(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::primitive, |state| {
state.sequence(|state| {
self::primitive_op(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| self::space(state))
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::partial(state))
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn primitive_op(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::primitive_op, |state| {
state
.match_string("<=")
.or_else(|state| state.match_string(">="))
.or_else(|state| state.match_string(">"))
.or_else(|state| state.match_string("<"))
.or_else(|state| state.match_string("="))
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn partial(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::partial, |state| {
state.sequence(|state| {
self::xr(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.optional(|state| {
state.sequence(|state| {
state
.match_string(".")
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::xr(state))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.optional(|state| {
state.sequence(|state| {
state
.match_string(".")
.and_then(|state| {
super::hidden::skip(state)
})
.and_then(|state| self::xr(state))
.and_then(|state| {
super::hidden::skip(state)
})
.and_then(|state| {
state.optional(|state| {
self::qualifier(state)
})
})
})
})
})
})
})
})
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn xr(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::xr, |state| {
self::xr_op(state).or_else(|state| self::nr(state))
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn xr_op(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::xr_op, |state| {
state
.match_string("x")
.or_else(|state| state.match_string("X"))
.or_else(|state| state.match_string("*"))
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn nr(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::nr, |state| {
state.match_string("0").or_else(|state| {
state.sequence(|state| {
state
.match_range('1'..'9')
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
state.match_range('0'..'9').and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(
|state| state.match_range('0'..'9'),
)
})
})
})
})
})
})
})
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn tilde(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::tilde, |state| {
state.sequence(|state| {
state
.match_string("~>")
.or_else(|state| state.match_string("~"))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| self::space(state))
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::partial(state))
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn caret(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::caret, |state| {
state.sequence(|state| {
state
.match_string("^")
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
self::space(state).and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state)
.and_then(|state| self::space(state))
})
})
})
})
})
})
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::partial(state))
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn qualifier(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::qualifier, |state| {
state.sequence(|state| {
state
.match_string("-")
.or_else(|state| state.match_string("+"))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| self::parts(state))
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn parts(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::parts, |state| {
state.sequence(|state| {
self::part(state)
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
state
.sequence(|state| {
state
.match_string(".")
.and_then(|state| {
super::hidden::skip(state)
})
.and_then(|state| self::part(state))
})
.and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(
|state| {
state.sequence(|state| {
state
.match_string(".")
.and_then(|state| {
super::hidden::skip(
state,
)
})
.and_then(|state| {
self::part(state)
})
})
},
)
})
})
})
})
})
})
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn part(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::part, |state| {
self::nr(state).or_else(|state| {
state.sequence(|state| {
state
.match_string("-")
.or_else(|state| state.match_range('0'..'9'))
.or_else(|state| state.match_range('A'..'Z'))
.or_else(|state| state.match_range('a'..'z'))
.and_then(|state| super::hidden::skip(state))
.and_then(|state| {
state.sequence(|state| {
state.optional(|state| {
state
.match_string("-")
.or_else(|state| state.match_range('0'..'9'))
.or_else(|state| state.match_range('A'..'Z'))
.or_else(|state| state.match_range('a'..'z'))
.and_then(|state| {
state.repeat(|state| {
state.sequence(|state| {
super::hidden::skip(state).and_then(
|state| {
state
.match_string("-")
.or_else(|state| {
state.match_range(
'0'..'9',
)
})
.or_else(|state| {
state.match_range(
'A'..'Z',
)
})
.or_else(|state| {
state.match_range(
'a'..'z',
)
})
},
)
})
})
})
})
})
})
})
})
})
}
#[inline]
#[allow(non_snake_case, unused_variables)]
pub fn space(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state
.match_string(" ")
.or_else(|state| state.match_string("\t"))
}
#[inline]
#[allow(dead_code, non_snake_case, unused_variables)]
pub fn EOI(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.rule(Rule::EOI, |state| state.end_of_input())
}
#[inline]
#[allow(dead_code, non_snake_case, unused_variables)]
pub fn SOI(
state: Box<::pest::ParserState<Rule>>,
) -> ::pest::ParseResult<Box<::pest::ParserState<Rule>>> {
state.start_of_input()
}
}
pub use self::visible::*;
}
::pest::state(input, |state| match rule {
Rule::range_set => rules::range_set(state),
Rule::logical_or => rules::logical_or(state),
Rule::range => rules::range(state),
Rule::empty => rules::empty(state),
Rule::hyphen => rules::hyphen(state),
Rule::simple => rules::simple(state),
Rule::primitive => rules::primitive(state),
Rule::primitive_op => rules::primitive_op(state),
Rule::partial => rules::partial(state),
Rule::xr => rules::xr(state),
Rule::xr_op => rules::xr_op(state),
Rule::nr => rules::nr(state),
Rule::tilde => rules::tilde(state),
Rule::caret => rules::caret(state),
Rule::qualifier => rules::qualifier(state),
Rule::parts => rules::parts(state),
Rule::part => rules::part(state),
Rule::space => rules::space(state),
Rule::EOI => rules::EOI(state),
})
}
}
@@ -0,0 +1,13 @@
mod modA {
mod modB {
mod modC {
mod modD {
mod modE {
fn func() {
state . rule (Rule :: myrule , | state | { state . sequence (| state | { state . sequence (| state | { state . match_string ("abc") . and_then (| state | { super :: hidden :: skip (state) }) . and_then (| state | { state . match_string ("def") }) }) . and_then (| state | { super :: hidden :: skip (state) }) . and_then (| state | { state . sequence (| state | { state . optional (| state | { state . sequence (| state | { state . match_string ("abc") . and_then (| state | { super :: hidden :: skip (state) }) . and_then (| state | { state . match_string ("def") }) }) . and_then (| state | { state . repeat (| state | { state . sequence (| state | { super :: hidden :: skip (state) . and_then (| state | { state . sequence (| state | { state . match_string ("abc") . and_then (| state | { super :: hidden :: skip (state) }) . and_then (| state | { state . match_string ("def") }) }) }) }) }) }) }) }) }) }) });
}
}
}
}
}
}
@@ -0,0 +1,4898 @@
fn takes_a_long_time_to_rustfmt() {
let inner_cte = vec![Node {
node: Some(node::Node::CommonTableExpr(Box::new(CommonTableExpr {
ctename: String::from("ranked_by_age_within_key"),
aliascolnames: vec![],
ctematerialized: CteMaterialize::Default as i32,
ctequery: Some(Box::new(Node {
node: Some(node::Node::SelectStmt(Box::new(SelectStmt {
distinct_clause: vec![],
into_clause: None,
target_list: vec![
Node {
node: Some(node::Node::ResTarget(Box::new(ResTarget {
name: String::from(""),
indirection: vec![],
val: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::AStar(AStar {})),
}],
location: 80,
})),
})),
location: 80,
}))),
},
Node {
node: Some(node::Node::ResTarget(Box::new(ResTarget {
name: String::from("rank_in_key"),
indirection: vec![],
val: Some(Box::new(Node {
node: Some(node::Node::FuncCall(Box::new(FuncCall {
funcname: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("row_number"),
})),
}],
args: vec![],
agg_order: vec![],
agg_filter: None,
agg_within_group: false,
agg_star: false,
agg_distinct: false,
func_variadic: false,
over: Some(Box::new(WindowDef {
name: String::from(""),
refname: String::from(""),
partition_clause: vec![Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("synthetic_key"),
})),
}],
location: 123,
})),
}],
order_clause: vec![Node {
node: Some(node::Node::SortBy(Box::new(SortBy {
node: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(
ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(
String2 {
str: String::from(
"logical_timestamp",
),
},
)),
}],
location: 156,
},
)),
})),
sortby_dir: SortByDir::SortbyDesc as i32,
sortby_nulls: SortByNulls::SortbyNullsDefault
as i32,
use_op: vec![],
location: -1,
}))),
}],
frame_options: 1058,
start_offset: None,
end_offset: None,
location: 109,
})),
location: 91,
}))),
})),
location: 91,
}))),
},
],
from_clause: vec![Node {
node: Some(node::Node::RangeVar(RangeVar {
catalogname: String::from(""),
schemaname: String::from("_supertables"),
relname: String::from("9999-9999-9999"),
inh: true,
relpersistence: String::from("p"),
alias: None,
location: 206,
})),
}],
where_clause: Some(Box::new(Node {
node: Some(node::Node::AExpr(Box::new(AExpr {
kind: AExprKind::AexprOp as i32,
name: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("<="),
})),
}],
lexpr: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("logical_timestamp"),
})),
}],
location: 250,
})),
})),
rexpr: Some(Box::new(Node {
node: Some(node::Node::AConst(Box::new(AConst {
val: Some(Box::new(Node {
node: Some(node::Node::Integer(Integer { ival: 9000 })),
})),
location: 271,
}))),
})),
location: 268,
}))),
})),
group_clause: vec![],
having_clause: None,
window_clause: vec![],
values_lists: vec![],
sort_clause: vec![],
limit_offset: None,
limit_count: None,
limit_option: LimitOption::Default as i32,
locking_clause: vec![],
with_clause: None,
op: SetOperation::SetopNone as i32,
all: false,
larg: None,
rarg: None,
}))),
})),
location: 29,
cterecursive: false,
cterefcount: 0,
ctecolnames: vec![],
ctecoltypes: vec![],
ctecoltypmods: vec![],
ctecolcollations: vec![],
}))),
}];
let outer_cte = vec![Node {
node: Some(node::Node::CommonTableExpr(Box::new(CommonTableExpr {
ctename: String::from("table_name"),
aliascolnames: vec![],
ctematerialized: CteMaterialize::Default as i32,
ctequery: Some(Box::new(Node {
node: Some(node::Node::SelectStmt(Box::new(SelectStmt {
distinct_clause: vec![],
into_clause: None,
target_list: vec![
Node {
node: Some(node::Node::ResTarget(Box::new(ResTarget {
name: String::from("column1"),
indirection: vec![],
val: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("c1"),
})),
}],
location: 301,
})),
})),
location: 301,
}))),
},
Node {
node: Some(node::Node::ResTarget(Box::new(ResTarget {
name: String::from("column2"),
indirection: vec![],
val: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("c2"),
})),
}],
location: 324,
})),
})),
location: 324,
}))),
},
],
from_clause: vec![Node {
node: Some(node::Node::RangeVar(RangeVar {
catalogname: String::from(""),
schemaname: String::from(""),
relname: String::from("ranked_by_age_within_key"),
inh: true,
relpersistence: String::from("p"),
alias: None,
location: 347,
})),
}],
where_clause: Some(Box::new(Node {
node: Some(node::Node::BoolExpr(Box::new(BoolExpr {
xpr: None,
boolop: BoolExprType::AndExpr as i32,
args: vec![
Node {
node: Some(node::Node::AExpr(Box::new(AExpr {
kind: AExprKind::AexprOp as i32,
name: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("="),
})),
}],
lexpr: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("rank_in_key"),
})),
}],
location: 382,
})),
})),
rexpr: Some(Box::new(Node {
node: Some(node::Node::AConst(Box::new(AConst {
val: Some(Box::new(Node {
node: Some(node::Node::Integer(Integer {
ival: 1,
})),
})),
location: 396,
}))),
})),
location: 394,
}))),
},
Node {
node: Some(node::Node::AExpr(Box::new(AExpr {
kind: AExprKind::AexprOp as i32,
name: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("="),
})),
}],
lexpr: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("is_deleted"),
})),
}],
location: 402,
})),
})),
rexpr: Some(Box::new(Node {
node: Some(node::Node::TypeCast(Box::new(TypeCast {
arg: Some(Box::new(Node {
node: Some(node::Node::AConst(Box::new(
AConst {
val: Some(Box::new(Node {
node: Some(node::Node::String(
String2 {
str: String::from("f"),
},
)),
})),
location: 415,
},
))),
})),
type_name: Some(TypeName {
names: vec![
Node {
node: Some(node::Node::String(
String2 {
str: String::from("pg_catalog"),
},
)),
},
Node {
node: Some(node::Node::String(
String2 {
str: String::from("bool"),
},
)),
},
],
type_oid: 0,
setof: false,
pct_type: false,
typmods: vec![],
typemod: -1,
array_bounds: vec![],
location: -1,
}),
location: -1,
}))),
})),
location: 413,
}))),
},
],
location: 398,
}))),
})),
group_clause: vec![],
having_clause: None,
window_clause: vec![],
values_lists: vec![],
sort_clause: vec![],
limit_offset: None,
limit_count: None,
limit_option: LimitOption::Default as i32,
locking_clause: vec![],
with_clause: Some(WithClause {
ctes: inner_cte,
recursive: false,
location: 24,
}),
op: SetOperation::SetopNone as i32,
all: false,
larg: None,
rarg: None,
}))),
})),
location: 5,
cterecursive: false,
cterefcount: 0,
ctecolnames: vec![],
ctecoltypes: vec![],
ctecoltypmods: vec![],
ctecolcollations: vec![],
}))),
}];
let expected_result = ParseResult {
version: 130003,
stmts: vec![RawStmt {
stmt: Some(Box::new(Node {
node: Some(node::Node::SelectStmt(Box::new(SelectStmt {
distinct_clause: vec![],
into_clause: None,
target_list: vec![Node {
node: Some(node::Node::ResTarget(Box::new(ResTarget {
name: String::from(""),
indirection: vec![],
val: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("column1"),
})),
}],
location: 430,
})),
})),
location: 430,
}))),
}],
from_clause: vec![Node {
node: Some(node::Node::RangeVar(RangeVar {
catalogname: String::from(""),
schemaname: String::from(""),
relname: String::from("table_name"),
inh: true,
relpersistence: String::from("p"),
alias: None,
location: 443,
})),
}],
where_clause: Some(Box::new(Node {
node: Some(node::Node::AExpr(Box::new(AExpr {
kind: AExprKind::AexprOp as i32,
name: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from(">"),
})),
}],
lexpr: Some(Box::new(Node {
node: Some(node::Node::ColumnRef(ColumnRef {
fields: vec![Node {
node: Some(node::Node::String(String2 {
str: String::from("column2"),
})),
}],
location: 460,
})),
})),
rexpr: Some(Box::new(Node {
node: Some(node::Node::AConst(Box::new(AConst {
val: Some(Box::new(Node {
node: Some(node::Node::Integer(Integer { ival: 9000 })),
})),
location: 470,
}))),
})),
location: 468,
}))),
})),
group_clause: vec![],
having_clause: None,
window_clause: vec![],
values_lists: vec![],
sort_clause: vec![],
limit_offset: None,
limit_count: None,
limit_option: LimitOption::Default as i32,
locking_clause: vec![],
with_clause: Some(WithClause {
ctes: outer_cte,
recursive: false,
location: 0,
}),
op: SetOperation::SetopNone as i32,
all: false,
larg: None,
rarg: None,
}))),
})),
stmt_location: 0,
stmt_len: 0,
}],
};
}
#[derive(Clone, PartialEq)]
pub struct ParseResult {
pub version: i32,
pub stmts: Vec<RawStmt>,
}
#[derive(Clone, PartialEq)]
pub struct ScanResult {
pub version: i32,
pub tokens: Vec<ScanToken>,
}
#[derive(Clone, PartialEq)]
pub struct Node {
pub node: ::core::option::Option<node::Node>,
}
/// Nested message and enum types in `Node`.
pub mod node {
#[derive(Clone, PartialEq)]
pub enum Node {
Alias(super::Alias),
RangeVar(super::RangeVar),
TableFunc(Box<super::TableFunc>),
Expr(super::Expr),
Var(Box<super::Var>),
Param(Box<super::Param>),
Aggref(Box<super::Aggref>),
GroupingFunc(Box<super::GroupingFunc>),
WindowFunc(Box<super::WindowFunc>),
SubscriptingRef(Box<super::SubscriptingRef>),
FuncExpr(Box<super::FuncExpr>),
NamedArgExpr(Box<super::NamedArgExpr>),
OpExpr(Box<super::OpExpr>),
DistinctExpr(Box<super::DistinctExpr>),
NullIfExpr(Box<super::NullIfExpr>),
ScalarArrayOpExpr(Box<super::ScalarArrayOpExpr>),
BoolExpr(Box<super::BoolExpr>),
SubLink(Box<super::SubLink>),
SubPlan(Box<super::SubPlan>),
AlternativeSubPlan(Box<super::AlternativeSubPlan>),
FieldSelect(Box<super::FieldSelect>),
FieldStore(Box<super::FieldStore>),
RelabelType(Box<super::RelabelType>),
CoerceViaIo(Box<super::CoerceViaIo>),
ArrayCoerceExpr(Box<super::ArrayCoerceExpr>),
ConvertRowtypeExpr(Box<super::ConvertRowtypeExpr>),
CollateExpr(Box<super::CollateExpr>),
CaseExpr(Box<super::CaseExpr>),
CaseWhen(Box<super::CaseWhen>),
CaseTestExpr(Box<super::CaseTestExpr>),
ArrayExpr(Box<super::ArrayExpr>),
RowExpr(Box<super::RowExpr>),
RowCompareExpr(Box<super::RowCompareExpr>),
CoalesceExpr(Box<super::CoalesceExpr>),
MinMaxExpr(Box<super::MinMaxExpr>),
SqlvalueFunction(Box<super::SqlValueFunction>),
XmlExpr(Box<super::XmlExpr>),
NullTest(Box<super::NullTest>),
BooleanTest(Box<super::BooleanTest>),
CoerceToDomain(Box<super::CoerceToDomain>),
CoerceToDomainValue(Box<super::CoerceToDomainValue>),
SetToDefault(Box<super::SetToDefault>),
CurrentOfExpr(Box<super::CurrentOfExpr>),
NextValueExpr(Box<super::NextValueExpr>),
InferenceElem(Box<super::InferenceElem>),
TargetEntry(Box<super::TargetEntry>),
RangeTblRef(super::RangeTblRef),
JoinExpr(Box<super::JoinExpr>),
FromExpr(Box<super::FromExpr>),
OnConflictExpr(Box<super::OnConflictExpr>),
IntoClause(Box<super::IntoClause>),
RawStmt(Box<super::RawStmt>),
Query(Box<super::Query>),
InsertStmt(Box<super::InsertStmt>),
DeleteStmt(Box<super::DeleteStmt>),
UpdateStmt(Box<super::UpdateStmt>),
SelectStmt(Box<super::SelectStmt>),
AlterTableStmt(super::AlterTableStmt),
AlterTableCmd(Box<super::AlterTableCmd>),
AlterDomainStmt(Box<super::AlterDomainStmt>),
SetOperationStmt(Box<super::SetOperationStmt>),
GrantStmt(super::GrantStmt),
GrantRoleStmt(super::GrantRoleStmt),
AlterDefaultPrivilegesStmt(super::AlterDefaultPrivilegesStmt),
ClosePortalStmt(super::ClosePortalStmt),
ClusterStmt(super::ClusterStmt),
CopyStmt(Box<super::CopyStmt>),
CreateStmt(super::CreateStmt),
DefineStmt(super::DefineStmt),
DropStmt(super::DropStmt),
TruncateStmt(super::TruncateStmt),
CommentStmt(Box<super::CommentStmt>),
FetchStmt(super::FetchStmt),
IndexStmt(Box<super::IndexStmt>),
CreateFunctionStmt(super::CreateFunctionStmt),
AlterFunctionStmt(super::AlterFunctionStmt),
DoStmt(super::DoStmt),
RenameStmt(Box<super::RenameStmt>),
RuleStmt(Box<super::RuleStmt>),
NotifyStmt(super::NotifyStmt),
ListenStmt(super::ListenStmt),
UnlistenStmt(super::UnlistenStmt),
TransactionStmt(super::TransactionStmt),
ViewStmt(Box<super::ViewStmt>),
LoadStmt(super::LoadStmt),
CreateDomainStmt(Box<super::CreateDomainStmt>),
CreatedbStmt(super::CreatedbStmt),
DropdbStmt(super::DropdbStmt),
VacuumStmt(super::VacuumStmt),
ExplainStmt(Box<super::ExplainStmt>),
CreateTableAsStmt(Box<super::CreateTableAsStmt>),
CreateSeqStmt(super::CreateSeqStmt),
AlterSeqStmt(super::AlterSeqStmt),
VariableSetStmt(super::VariableSetStmt),
VariableShowStmt(super::VariableShowStmt),
DiscardStmt(super::DiscardStmt),
CreateTrigStmt(Box<super::CreateTrigStmt>),
CreatePlangStmt(super::CreatePLangStmt),
CreateRoleStmt(super::CreateRoleStmt),
AlterRoleStmt(super::AlterRoleStmt),
DropRoleStmt(super::DropRoleStmt),
LockStmt(super::LockStmt),
ConstraintsSetStmt(super::ConstraintsSetStmt),
ReindexStmt(super::ReindexStmt),
CheckPointStmt(super::CheckPointStmt),
CreateSchemaStmt(super::CreateSchemaStmt),
AlterDatabaseStmt(super::AlterDatabaseStmt),
AlterDatabaseSetStmt(super::AlterDatabaseSetStmt),
AlterRoleSetStmt(super::AlterRoleSetStmt),
CreateConversionStmt(super::CreateConversionStmt),
CreateCastStmt(super::CreateCastStmt),
CreateOpClassStmt(super::CreateOpClassStmt),
CreateOpFamilyStmt(super::CreateOpFamilyStmt),
AlterOpFamilyStmt(super::AlterOpFamilyStmt),
PrepareStmt(Box<super::PrepareStmt>),
ExecuteStmt(super::ExecuteStmt),
DeallocateStmt(super::DeallocateStmt),
DeclareCursorStmt(Box<super::DeclareCursorStmt>),
CreateTableSpaceStmt(super::CreateTableSpaceStmt),
DropTableSpaceStmt(super::DropTableSpaceStmt),
AlterObjectDependsStmt(Box<super::AlterObjectDependsStmt>),
AlterObjectSchemaStmt(Box<super::AlterObjectSchemaStmt>),
AlterOwnerStmt(Box<super::AlterOwnerStmt>),
AlterOperatorStmt(super::AlterOperatorStmt),
AlterTypeStmt(super::AlterTypeStmt),
DropOwnedStmt(super::DropOwnedStmt),
ReassignOwnedStmt(super::ReassignOwnedStmt),
CompositeTypeStmt(super::CompositeTypeStmt),
CreateEnumStmt(super::CreateEnumStmt),
CreateRangeStmt(super::CreateRangeStmt),
AlterEnumStmt(super::AlterEnumStmt),
AlterTsdictionaryStmt(super::AlterTsDictionaryStmt),
AlterTsconfigurationStmt(super::AlterTsConfigurationStmt),
CreateFdwStmt(super::CreateFdwStmt),
AlterFdwStmt(super::AlterFdwStmt),
CreateForeignServerStmt(super::CreateForeignServerStmt),
AlterForeignServerStmt(super::AlterForeignServerStmt),
CreateUserMappingStmt(super::CreateUserMappingStmt),
AlterUserMappingStmt(super::AlterUserMappingStmt),
DropUserMappingStmt(super::DropUserMappingStmt),
AlterTableSpaceOptionsStmt(super::AlterTableSpaceOptionsStmt),
AlterTableMoveAllStmt(super::AlterTableMoveAllStmt),
SecLabelStmt(Box<super::SecLabelStmt>),
CreateForeignTableStmt(super::CreateForeignTableStmt),
ImportForeignSchemaStmt(super::ImportForeignSchemaStmt),
CreateExtensionStmt(super::CreateExtensionStmt),
AlterExtensionStmt(super::AlterExtensionStmt),
AlterExtensionContentsStmt(Box<super::AlterExtensionContentsStmt>),
CreateEventTrigStmt(super::CreateEventTrigStmt),
AlterEventTrigStmt(super::AlterEventTrigStmt),
RefreshMatViewStmt(super::RefreshMatViewStmt),
ReplicaIdentityStmt(super::ReplicaIdentityStmt),
AlterSystemStmt(super::AlterSystemStmt),
CreatePolicyStmt(Box<super::CreatePolicyStmt>),
AlterPolicyStmt(Box<super::AlterPolicyStmt>),
CreateTransformStmt(super::CreateTransformStmt),
CreateAmStmt(super::CreateAmStmt),
CreatePublicationStmt(super::CreatePublicationStmt),
AlterPublicationStmt(super::AlterPublicationStmt),
CreateSubscriptionStmt(super::CreateSubscriptionStmt),
AlterSubscriptionStmt(super::AlterSubscriptionStmt),
DropSubscriptionStmt(super::DropSubscriptionStmt),
CreateStatsStmt(super::CreateStatsStmt),
AlterCollationStmt(super::AlterCollationStmt),
CallStmt(Box<super::CallStmt>),
AlterStatsStmt(super::AlterStatsStmt),
AExpr(Box<super::AExpr>),
ColumnRef(super::ColumnRef),
ParamRef(super::ParamRef),
AConst(Box<super::AConst>),
FuncCall(Box<super::FuncCall>),
AStar(super::AStar),
AIndices(Box<super::AIndices>),
AIndirection(Box<super::AIndirection>),
AArrayExpr(super::AArrayExpr),
ResTarget(Box<super::ResTarget>),
MultiAssignRef(Box<super::MultiAssignRef>),
TypeCast(Box<super::TypeCast>),
CollateClause(Box<super::CollateClause>),
SortBy(Box<super::SortBy>),
WindowDef(Box<super::WindowDef>),
RangeSubselect(Box<super::RangeSubselect>),
RangeFunction(super::RangeFunction),
RangeTableSample(Box<super::RangeTableSample>),
RangeTableFunc(Box<super::RangeTableFunc>),
RangeTableFuncCol(Box<super::RangeTableFuncCol>),
TypeName(super::TypeName),
ColumnDef(Box<super::ColumnDef>),
IndexElem(Box<super::IndexElem>),
Constraint(Box<super::Constraint>),
DefElem(Box<super::DefElem>),
RangeTblEntry(Box<super::RangeTblEntry>),
RangeTblFunction(Box<super::RangeTblFunction>),
TableSampleClause(Box<super::TableSampleClause>),
WithCheckOption(Box<super::WithCheckOption>),
SortGroupClause(super::SortGroupClause),
GroupingSet(super::GroupingSet),
WindowClause(Box<super::WindowClause>),
ObjectWithArgs(super::ObjectWithArgs),
AccessPriv(super::AccessPriv),
CreateOpClassItem(super::CreateOpClassItem),
TableLikeClause(super::TableLikeClause),
FunctionParameter(Box<super::FunctionParameter>),
LockingClause(super::LockingClause),
RowMarkClause(super::RowMarkClause),
XmlSerialize(Box<super::XmlSerialize>),
WithClause(super::WithClause),
InferClause(Box<super::InferClause>),
OnConflictClause(Box<super::OnConflictClause>),
CommonTableExpr(Box<super::CommonTableExpr>),
RoleSpec(super::RoleSpec),
TriggerTransition(super::TriggerTransition),
PartitionElem(Box<super::PartitionElem>),
PartitionSpec(super::PartitionSpec),
PartitionBoundSpec(super::PartitionBoundSpec),
PartitionRangeDatum(Box<super::PartitionRangeDatum>),
PartitionCmd(super::PartitionCmd),
VacuumRelation(super::VacuumRelation),
InlineCodeBlock(super::InlineCodeBlock),
CallContext(super::CallContext),
Integer(super::Integer),
Float(super::Float),
String(super::String2),
BitString(super::BitString),
Null(super::Null),
List(super::List),
IntList(super::IntList),
OidList(super::OidList),
}
}
#[derive(Clone, PartialEq)]
pub struct Integer {
/// machine integer
pub ival: i32,
}
#[derive(Clone, PartialEq)]
pub struct Float {
/// string
pub str: String,
}
#[derive(Clone, PartialEq)]
pub struct String2 {
/// string
pub str: String,
}
#[derive(Clone, PartialEq)]
pub struct BitString {
/// string
pub str: String,
}
/// intentionally empty
#[derive(Clone, PartialEq)]
pub struct Null {}
#[derive(Clone, PartialEq)]
pub struct List {
pub items: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct OidList {
pub items: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct IntList {
pub items: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct Alias {
pub aliasname: String,
pub colnames: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct RangeVar {
pub catalogname: String,
pub schemaname: String,
pub relname: String,
pub inh: bool,
pub relpersistence: String,
pub alias: ::core::option::Option<Alias>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct TableFunc {
pub ns_uris: Vec<Node>,
pub ns_names: Vec<Node>,
pub docexpr: ::core::option::Option<Box<Node>>,
pub rowexpr: ::core::option::Option<Box<Node>>,
pub colnames: Vec<Node>,
pub coltypes: Vec<Node>,
pub coltypmods: Vec<Node>,
pub colcollations: Vec<Node>,
pub colexprs: Vec<Node>,
pub coldefexprs: Vec<Node>,
pub notnulls: Vec<u64>,
pub ordinalitycol: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct Expr {}
#[derive(Clone, PartialEq)]
pub struct Var {
pub xpr: ::core::option::Option<Box<Node>>,
pub varno: u32,
pub varattno: i32,
pub vartype: u32,
pub vartypmod: i32,
pub varcollid: u32,
pub varlevelsup: u32,
pub varnosyn: u32,
pub varattnosyn: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct Param {
pub xpr: ::core::option::Option<Box<Node>>,
pub paramkind: i32,
pub paramid: i32,
pub paramtype: u32,
pub paramtypmod: i32,
pub paramcollid: u32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct Aggref {
pub xpr: ::core::option::Option<Box<Node>>,
pub aggfnoid: u32,
pub aggtype: u32,
pub aggcollid: u32,
pub inputcollid: u32,
pub aggtranstype: u32,
pub aggargtypes: Vec<Node>,
pub aggdirectargs: Vec<Node>,
pub args: Vec<Node>,
pub aggorder: Vec<Node>,
pub aggdistinct: Vec<Node>,
pub aggfilter: ::core::option::Option<Box<Node>>,
pub aggstar: bool,
pub aggvariadic: bool,
pub aggkind: String,
pub agglevelsup: u32,
pub aggsplit: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct GroupingFunc {
pub xpr: ::core::option::Option<Box<Node>>,
pub args: Vec<Node>,
pub refs: Vec<Node>,
pub cols: Vec<Node>,
pub agglevelsup: u32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct WindowFunc {
pub xpr: ::core::option::Option<Box<Node>>,
pub winfnoid: u32,
pub wintype: u32,
pub wincollid: u32,
pub inputcollid: u32,
pub args: Vec<Node>,
pub aggfilter: ::core::option::Option<Box<Node>>,
pub winref: u32,
pub winstar: bool,
pub winagg: bool,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct SubscriptingRef {
pub xpr: ::core::option::Option<Box<Node>>,
pub refcontainertype: u32,
pub refelemtype: u32,
pub reftypmod: i32,
pub refcollid: u32,
pub refupperindexpr: Vec<Node>,
pub reflowerindexpr: Vec<Node>,
pub refexpr: ::core::option::Option<Box<Node>>,
pub refassgnexpr: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct FuncExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub funcid: u32,
pub funcresulttype: u32,
pub funcretset: bool,
pub funcvariadic: bool,
pub funcformat: i32,
pub funccollid: u32,
pub inputcollid: u32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct NamedArgExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub name: String,
pub argnumber: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct OpExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub opno: u32,
pub opfuncid: u32,
pub opresulttype: u32,
pub opretset: bool,
pub opcollid: u32,
pub inputcollid: u32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct DistinctExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub opno: u32,
pub opfuncid: u32,
pub opresulttype: u32,
pub opretset: bool,
pub opcollid: u32,
pub inputcollid: u32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct NullIfExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub opno: u32,
pub opfuncid: u32,
pub opresulttype: u32,
pub opretset: bool,
pub opcollid: u32,
pub inputcollid: u32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ScalarArrayOpExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub opno: u32,
pub opfuncid: u32,
pub use_or: bool,
pub inputcollid: u32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct BoolExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub boolop: i32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct SubLink {
pub xpr: ::core::option::Option<Box<Node>>,
pub sub_link_type: i32,
pub sub_link_id: i32,
pub testexpr: ::core::option::Option<Box<Node>>,
pub oper_name: Vec<Node>,
pub subselect: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct SubPlan {
pub xpr: ::core::option::Option<Box<Node>>,
pub sub_link_type: i32,
pub testexpr: ::core::option::Option<Box<Node>>,
pub param_ids: Vec<Node>,
pub plan_id: i32,
pub plan_name: String,
pub first_col_type: u32,
pub first_col_typmod: i32,
pub first_col_collation: u32,
pub use_hash_table: bool,
pub unknown_eq_false: bool,
pub parallel_safe: bool,
pub set_param: Vec<Node>,
pub par_param: Vec<Node>,
pub args: Vec<Node>,
pub startup_cost: f64,
pub per_call_cost: f64,
}
#[derive(Clone, PartialEq)]
pub struct AlternativeSubPlan {
pub xpr: ::core::option::Option<Box<Node>>,
pub subplans: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct FieldSelect {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub fieldnum: i32,
pub resulttype: u32,
pub resulttypmod: i32,
pub resultcollid: u32,
}
#[derive(Clone, PartialEq)]
pub struct FieldStore {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub newvals: Vec<Node>,
pub fieldnums: Vec<Node>,
pub resulttype: u32,
}
#[derive(Clone, PartialEq)]
pub struct RelabelType {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub resulttype: u32,
pub resulttypmod: i32,
pub resultcollid: u32,
pub relabelformat: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CoerceViaIo {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub resulttype: u32,
pub resultcollid: u32,
pub coerceformat: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ArrayCoerceExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub elemexpr: ::core::option::Option<Box<Node>>,
pub resulttype: u32,
pub resulttypmod: i32,
pub resultcollid: u32,
pub coerceformat: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ConvertRowtypeExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub resulttype: u32,
pub convertformat: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CollateExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub coll_oid: u32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CaseExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub casetype: u32,
pub casecollid: u32,
pub arg: ::core::option::Option<Box<Node>>,
pub args: Vec<Node>,
pub defresult: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CaseWhen {
pub xpr: ::core::option::Option<Box<Node>>,
pub expr: ::core::option::Option<Box<Node>>,
pub result: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CaseTestExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub type_id: u32,
pub type_mod: i32,
pub collation: u32,
}
#[derive(Clone, PartialEq)]
pub struct ArrayExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub array_typeid: u32,
pub array_collid: u32,
pub element_typeid: u32,
pub elements: Vec<Node>,
pub multidims: bool,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct RowExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub args: Vec<Node>,
pub row_typeid: u32,
pub row_format: i32,
pub colnames: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct RowCompareExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub rctype: i32,
pub opnos: Vec<Node>,
pub opfamilies: Vec<Node>,
pub inputcollids: Vec<Node>,
pub largs: Vec<Node>,
pub rargs: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CoalesceExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub coalescetype: u32,
pub coalescecollid: u32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct MinMaxExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub minmaxtype: u32,
pub minmaxcollid: u32,
pub inputcollid: u32,
pub op: i32,
pub args: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct SqlValueFunction {
pub xpr: ::core::option::Option<Box<Node>>,
pub op: i32,
pub r#type: u32,
pub typmod: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct XmlExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub op: i32,
pub name: String,
pub named_args: Vec<Node>,
pub arg_names: Vec<Node>,
pub args: Vec<Node>,
pub xmloption: i32,
pub r#type: u32,
pub typmod: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct NullTest {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub nulltesttype: i32,
pub argisrow: bool,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct BooleanTest {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub booltesttype: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CoerceToDomain {
pub xpr: ::core::option::Option<Box<Node>>,
pub arg: ::core::option::Option<Box<Node>>,
pub resulttype: u32,
pub resulttypmod: i32,
pub resultcollid: u32,
pub coercionformat: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CoerceToDomainValue {
pub xpr: ::core::option::Option<Box<Node>>,
pub type_id: u32,
pub type_mod: i32,
pub collation: u32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct SetToDefault {
pub xpr: ::core::option::Option<Box<Node>>,
pub type_id: u32,
pub type_mod: i32,
pub collation: u32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CurrentOfExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub cvarno: u32,
pub cursor_name: String,
pub cursor_param: i32,
}
#[derive(Clone, PartialEq)]
pub struct NextValueExpr {
pub xpr: ::core::option::Option<Box<Node>>,
pub seqid: u32,
pub type_id: u32,
}
#[derive(Clone, PartialEq)]
pub struct InferenceElem {
pub xpr: ::core::option::Option<Box<Node>>,
pub expr: ::core::option::Option<Box<Node>>,
pub infercollid: u32,
pub inferopclass: u32,
}
#[derive(Clone, PartialEq)]
pub struct TargetEntry {
pub xpr: ::core::option::Option<Box<Node>>,
pub expr: ::core::option::Option<Box<Node>>,
pub resno: i32,
pub resname: String,
pub ressortgroupref: u32,
pub resorigtbl: u32,
pub resorigcol: i32,
pub resjunk: bool,
}
#[derive(Clone, PartialEq)]
pub struct RangeTblRef {
pub rtindex: i32,
}
#[derive(Clone, PartialEq)]
pub struct JoinExpr {
pub jointype: i32,
pub is_natural: bool,
pub larg: ::core::option::Option<Box<Node>>,
pub rarg: ::core::option::Option<Box<Node>>,
pub using_clause: Vec<Node>,
pub quals: ::core::option::Option<Box<Node>>,
pub alias: ::core::option::Option<Alias>,
pub rtindex: i32,
}
#[derive(Clone, PartialEq)]
pub struct FromExpr {
pub fromlist: Vec<Node>,
pub quals: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct OnConflictExpr {
pub action: i32,
pub arbiter_elems: Vec<Node>,
pub arbiter_where: ::core::option::Option<Box<Node>>,
pub constraint: u32,
pub on_conflict_set: Vec<Node>,
pub on_conflict_where: ::core::option::Option<Box<Node>>,
pub excl_rel_index: i32,
pub excl_rel_tlist: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct IntoClause {
pub rel: ::core::option::Option<RangeVar>,
pub col_names: Vec<Node>,
pub access_method: String,
pub options: Vec<Node>,
pub on_commit: i32,
pub table_space_name: String,
pub view_query: ::core::option::Option<Box<Node>>,
pub skip_data: bool,
}
#[derive(Clone, PartialEq)]
pub struct RawStmt {
pub stmt: ::core::option::Option<Box<Node>>,
pub stmt_location: i32,
pub stmt_len: i32,
}
#[derive(Clone, PartialEq)]
pub struct Query {
pub command_type: i32,
pub query_source: i32,
pub can_set_tag: bool,
pub utility_stmt: ::core::option::Option<Box<Node>>,
pub result_relation: i32,
pub has_aggs: bool,
pub has_window_funcs: bool,
pub has_target_srfs: bool,
pub has_sub_links: bool,
pub has_distinct_on: bool,
pub has_recursive: bool,
pub has_modifying_cte: bool,
pub has_for_update: bool,
pub has_row_security: bool,
pub cte_list: Vec<Node>,
pub rtable: Vec<Node>,
pub jointree: ::core::option::Option<Box<FromExpr>>,
pub target_list: Vec<Node>,
pub r#override: i32,
pub on_conflict: ::core::option::Option<Box<OnConflictExpr>>,
pub returning_list: Vec<Node>,
pub group_clause: Vec<Node>,
pub grouping_sets: Vec<Node>,
pub having_qual: ::core::option::Option<Box<Node>>,
pub window_clause: Vec<Node>,
pub distinct_clause: Vec<Node>,
pub sort_clause: Vec<Node>,
pub limit_offset: ::core::option::Option<Box<Node>>,
pub limit_count: ::core::option::Option<Box<Node>>,
pub limit_option: i32,
pub row_marks: Vec<Node>,
pub set_operations: ::core::option::Option<Box<Node>>,
pub constraint_deps: Vec<Node>,
pub with_check_options: Vec<Node>,
pub stmt_location: i32,
pub stmt_len: i32,
}
#[derive(Clone, PartialEq)]
pub struct InsertStmt {
pub relation: ::core::option::Option<RangeVar>,
pub cols: Vec<Node>,
pub select_stmt: ::core::option::Option<Box<Node>>,
pub on_conflict_clause: ::core::option::Option<Box<OnConflictClause>>,
pub returning_list: Vec<Node>,
pub with_clause: ::core::option::Option<WithClause>,
pub r#override: i32,
}
#[derive(Clone, PartialEq)]
pub struct DeleteStmt {
pub relation: ::core::option::Option<RangeVar>,
pub using_clause: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
pub returning_list: Vec<Node>,
pub with_clause: ::core::option::Option<WithClause>,
}
#[derive(Clone, PartialEq)]
pub struct UpdateStmt {
pub relation: ::core::option::Option<RangeVar>,
pub target_list: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
pub from_clause: Vec<Node>,
pub returning_list: Vec<Node>,
pub with_clause: ::core::option::Option<WithClause>,
}
#[derive(Clone, PartialEq)]
pub struct SelectStmt {
pub distinct_clause: Vec<Node>,
pub into_clause: ::core::option::Option<Box<IntoClause>>,
pub target_list: Vec<Node>,
pub from_clause: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
pub group_clause: Vec<Node>,
pub having_clause: ::core::option::Option<Box<Node>>,
pub window_clause: Vec<Node>,
pub values_lists: Vec<Node>,
pub sort_clause: Vec<Node>,
pub limit_offset: ::core::option::Option<Box<Node>>,
pub limit_count: ::core::option::Option<Box<Node>>,
pub limit_option: i32,
pub locking_clause: Vec<Node>,
pub with_clause: ::core::option::Option<WithClause>,
pub op: i32,
pub all: bool,
pub larg: ::core::option::Option<Box<SelectStmt>>,
pub rarg: ::core::option::Option<Box<SelectStmt>>,
}
#[derive(Clone, PartialEq)]
pub struct AlterTableStmt {
pub relation: ::core::option::Option<RangeVar>,
pub cmds: Vec<Node>,
pub relkind: i32,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterTableCmd {
pub subtype: i32,
pub name: String,
pub num: i32,
pub newowner: ::core::option::Option<RoleSpec>,
pub def: ::core::option::Option<Box<Node>>,
pub behavior: i32,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterDomainStmt {
pub subtype: String,
pub type_name: Vec<Node>,
pub name: String,
pub def: ::core::option::Option<Box<Node>>,
pub behavior: i32,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct SetOperationStmt {
pub op: i32,
pub all: bool,
pub larg: ::core::option::Option<Box<Node>>,
pub rarg: ::core::option::Option<Box<Node>>,
pub col_types: Vec<Node>,
pub col_typmods: Vec<Node>,
pub col_collations: Vec<Node>,
pub group_clauses: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct GrantStmt {
pub is_grant: bool,
pub targtype: i32,
pub objtype: i32,
pub objects: Vec<Node>,
pub privileges: Vec<Node>,
pub grantees: Vec<Node>,
pub grant_option: bool,
pub behavior: i32,
}
#[derive(Clone, PartialEq)]
pub struct GrantRoleStmt {
pub granted_roles: Vec<Node>,
pub grantee_roles: Vec<Node>,
pub is_grant: bool,
pub admin_opt: bool,
pub grantor: ::core::option::Option<RoleSpec>,
pub behavior: i32,
}
#[derive(Clone, PartialEq)]
pub struct AlterDefaultPrivilegesStmt {
pub options: Vec<Node>,
pub action: ::core::option::Option<GrantStmt>,
}
#[derive(Clone, PartialEq)]
pub struct ClosePortalStmt {
pub portalname: String,
}
#[derive(Clone, PartialEq)]
pub struct ClusterStmt {
pub relation: ::core::option::Option<RangeVar>,
pub indexname: String,
pub options: i32,
}
#[derive(Clone, PartialEq)]
pub struct CopyStmt {
pub relation: ::core::option::Option<RangeVar>,
pub query: ::core::option::Option<Box<Node>>,
pub attlist: Vec<Node>,
pub is_from: bool,
pub is_program: bool,
pub filename: String,
pub options: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct CreateStmt {
pub relation: ::core::option::Option<RangeVar>,
pub table_elts: Vec<Node>,
pub inh_relations: Vec<Node>,
pub partbound: ::core::option::Option<PartitionBoundSpec>,
pub partspec: ::core::option::Option<PartitionSpec>,
pub of_typename: ::core::option::Option<TypeName>,
pub constraints: Vec<Node>,
pub options: Vec<Node>,
pub oncommit: i32,
pub tablespacename: String,
pub access_method: String,
pub if_not_exists: bool,
}
#[derive(Clone, PartialEq)]
pub struct DefineStmt {
pub kind: i32,
pub oldstyle: bool,
pub defnames: Vec<Node>,
pub args: Vec<Node>,
pub definition: Vec<Node>,
pub if_not_exists: bool,
pub replace: bool,
}
#[derive(Clone, PartialEq)]
pub struct DropStmt {
pub objects: Vec<Node>,
pub remove_type: i32,
pub behavior: i32,
pub missing_ok: bool,
pub concurrent: bool,
}
#[derive(Clone, PartialEq)]
pub struct TruncateStmt {
pub relations: Vec<Node>,
pub restart_seqs: bool,
pub behavior: i32,
}
#[derive(Clone, PartialEq)]
pub struct CommentStmt {
pub objtype: i32,
pub object: ::core::option::Option<Box<Node>>,
pub comment: String,
}
#[derive(Clone, PartialEq)]
pub struct FetchStmt {
pub direction: i32,
pub how_many: i64,
pub portalname: String,
pub ismove: bool,
}
#[derive(Clone, PartialEq)]
pub struct IndexStmt {
pub idxname: String,
pub relation: ::core::option::Option<RangeVar>,
pub access_method: String,
pub table_space: String,
pub index_params: Vec<Node>,
pub index_including_params: Vec<Node>,
pub options: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
pub exclude_op_names: Vec<Node>,
pub idxcomment: String,
pub index_oid: u32,
pub old_node: u32,
pub old_create_subid: u32,
pub old_first_relfilenode_subid: u32,
pub unique: bool,
pub primary: bool,
pub isconstraint: bool,
pub deferrable: bool,
pub initdeferred: bool,
pub transformed: bool,
pub concurrent: bool,
pub if_not_exists: bool,
pub reset_default_tblspc: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateFunctionStmt {
pub is_procedure: bool,
pub replace: bool,
pub funcname: Vec<Node>,
pub parameters: Vec<Node>,
pub return_type: ::core::option::Option<TypeName>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterFunctionStmt {
pub objtype: i32,
pub func: ::core::option::Option<ObjectWithArgs>,
pub actions: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DoStmt {
pub args: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct RenameStmt {
pub rename_type: i32,
pub relation_type: i32,
pub relation: ::core::option::Option<RangeVar>,
pub object: ::core::option::Option<Box<Node>>,
pub subname: String,
pub newname: String,
pub behavior: i32,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct RuleStmt {
pub relation: ::core::option::Option<RangeVar>,
pub rulename: String,
pub where_clause: ::core::option::Option<Box<Node>>,
pub event: i32,
pub instead: bool,
pub actions: Vec<Node>,
pub replace: bool,
}
#[derive(Clone, PartialEq)]
pub struct NotifyStmt {
pub conditionname: String,
pub payload: String,
}
#[derive(Clone, PartialEq)]
pub struct ListenStmt {
pub conditionname: String,
}
#[derive(Clone, PartialEq)]
pub struct UnlistenStmt {
pub conditionname: String,
}
#[derive(Clone, PartialEq)]
pub struct TransactionStmt {
pub kind: i32,
pub options: Vec<Node>,
pub savepoint_name: String,
pub gid: String,
pub chain: bool,
}
#[derive(Clone, PartialEq)]
pub struct ViewStmt {
pub view: ::core::option::Option<RangeVar>,
pub aliases: Vec<Node>,
pub query: ::core::option::Option<Box<Node>>,
pub replace: bool,
pub options: Vec<Node>,
pub with_check_option: i32,
}
#[derive(Clone, PartialEq)]
pub struct LoadStmt {
pub filename: String,
}
#[derive(Clone, PartialEq)]
pub struct CreateDomainStmt {
pub domainname: Vec<Node>,
pub type_name: ::core::option::Option<TypeName>,
pub coll_clause: ::core::option::Option<Box<CollateClause>>,
pub constraints: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreatedbStmt {
pub dbname: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DropdbStmt {
pub dbname: String,
pub missing_ok: bool,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct VacuumStmt {
pub options: Vec<Node>,
pub rels: Vec<Node>,
pub is_vacuumcmd: bool,
}
#[derive(Clone, PartialEq)]
pub struct ExplainStmt {
pub query: ::core::option::Option<Box<Node>>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreateTableAsStmt {
pub query: ::core::option::Option<Box<Node>>,
pub into: ::core::option::Option<Box<IntoClause>>,
pub relkind: i32,
pub is_select_into: bool,
pub if_not_exists: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateSeqStmt {
pub sequence: ::core::option::Option<RangeVar>,
pub options: Vec<Node>,
pub owner_id: u32,
pub for_identity: bool,
pub if_not_exists: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterSeqStmt {
pub sequence: ::core::option::Option<RangeVar>,
pub options: Vec<Node>,
pub for_identity: bool,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct VariableSetStmt {
pub kind: i32,
pub name: String,
pub args: Vec<Node>,
pub is_local: bool,
}
#[derive(Clone, PartialEq)]
pub struct VariableShowStmt {
pub name: String,
}
#[derive(Clone, PartialEq)]
pub struct DiscardStmt {
pub target: i32,
}
#[derive(Clone, PartialEq)]
pub struct CreateTrigStmt {
pub trigname: String,
pub relation: ::core::option::Option<RangeVar>,
pub funcname: Vec<Node>,
pub args: Vec<Node>,
pub row: bool,
pub timing: i32,
pub events: i32,
pub columns: Vec<Node>,
pub when_clause: ::core::option::Option<Box<Node>>,
pub isconstraint: bool,
pub transition_rels: Vec<Node>,
pub deferrable: bool,
pub initdeferred: bool,
pub constrrel: ::core::option::Option<RangeVar>,
}
#[derive(Clone, PartialEq)]
pub struct CreatePLangStmt {
pub replace: bool,
pub plname: String,
pub plhandler: Vec<Node>,
pub plinline: Vec<Node>,
pub plvalidator: Vec<Node>,
pub pltrusted: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateRoleStmt {
pub stmt_type: i32,
pub role: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterRoleStmt {
pub role: ::core::option::Option<RoleSpec>,
pub options: Vec<Node>,
pub action: i32,
}
#[derive(Clone, PartialEq)]
pub struct DropRoleStmt {
pub roles: Vec<Node>,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct LockStmt {
pub relations: Vec<Node>,
pub mode: i32,
pub nowait: bool,
}
#[derive(Clone, PartialEq)]
pub struct ConstraintsSetStmt {
pub constraints: Vec<Node>,
pub deferred: bool,
}
#[derive(Clone, PartialEq)]
pub struct ReindexStmt {
pub kind: i32,
pub relation: ::core::option::Option<RangeVar>,
pub name: String,
pub options: i32,
pub concurrent: bool,
}
#[derive(Clone, PartialEq)]
pub struct CheckPointStmt {}
#[derive(Clone, PartialEq)]
pub struct CreateSchemaStmt {
pub schemaname: String,
pub authrole: ::core::option::Option<RoleSpec>,
pub schema_elts: Vec<Node>,
pub if_not_exists: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterDatabaseStmt {
pub dbname: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterDatabaseSetStmt {
pub dbname: String,
pub setstmt: ::core::option::Option<VariableSetStmt>,
}
#[derive(Clone, PartialEq)]
pub struct AlterRoleSetStmt {
pub role: ::core::option::Option<RoleSpec>,
pub database: String,
pub setstmt: ::core::option::Option<VariableSetStmt>,
}
#[derive(Clone, PartialEq)]
pub struct CreateConversionStmt {
pub conversion_name: Vec<Node>,
pub for_encoding_name: String,
pub to_encoding_name: String,
pub func_name: Vec<Node>,
pub def: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateCastStmt {
pub sourcetype: ::core::option::Option<TypeName>,
pub targettype: ::core::option::Option<TypeName>,
pub func: ::core::option::Option<ObjectWithArgs>,
pub context: i32,
pub inout: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateOpClassStmt {
pub opclassname: Vec<Node>,
pub opfamilyname: Vec<Node>,
pub amname: String,
pub datatype: ::core::option::Option<TypeName>,
pub items: Vec<Node>,
pub is_default: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateOpFamilyStmt {
pub opfamilyname: Vec<Node>,
pub amname: String,
}
#[derive(Clone, PartialEq)]
pub struct AlterOpFamilyStmt {
pub opfamilyname: Vec<Node>,
pub amname: String,
pub is_drop: bool,
pub items: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct PrepareStmt {
pub name: String,
pub argtypes: Vec<Node>,
pub query: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct ExecuteStmt {
pub name: String,
pub params: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DeallocateStmt {
pub name: String,
}
#[derive(Clone, PartialEq)]
pub struct DeclareCursorStmt {
pub portalname: String,
pub options: i32,
pub query: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct CreateTableSpaceStmt {
pub tablespacename: String,
pub owner: ::core::option::Option<RoleSpec>,
pub location: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DropTableSpaceStmt {
pub tablespacename: String,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterObjectDependsStmt {
pub object_type: i32,
pub relation: ::core::option::Option<RangeVar>,
pub object: ::core::option::Option<Box<Node>>,
pub extname: ::core::option::Option<Box<Node>>,
pub remove: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterObjectSchemaStmt {
pub object_type: i32,
pub relation: ::core::option::Option<RangeVar>,
pub object: ::core::option::Option<Box<Node>>,
pub newschema: String,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterOwnerStmt {
pub object_type: i32,
pub relation: ::core::option::Option<RangeVar>,
pub object: ::core::option::Option<Box<Node>>,
pub newowner: ::core::option::Option<RoleSpec>,
}
#[derive(Clone, PartialEq)]
pub struct AlterOperatorStmt {
pub opername: ::core::option::Option<ObjectWithArgs>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterTypeStmt {
pub type_name: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DropOwnedStmt {
pub roles: Vec<Node>,
pub behavior: i32,
}
#[derive(Clone, PartialEq)]
pub struct ReassignOwnedStmt {
pub roles: Vec<Node>,
pub newrole: ::core::option::Option<RoleSpec>,
}
#[derive(Clone, PartialEq)]
pub struct CompositeTypeStmt {
pub typevar: ::core::option::Option<RangeVar>,
pub coldeflist: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreateEnumStmt {
pub type_name: Vec<Node>,
pub vals: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreateRangeStmt {
pub type_name: Vec<Node>,
pub params: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterEnumStmt {
pub type_name: Vec<Node>,
pub old_val: String,
pub new_val: String,
pub new_val_neighbor: String,
pub new_val_is_after: bool,
pub skip_if_new_val_exists: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterTsDictionaryStmt {
pub dictname: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterTsConfigurationStmt {
pub kind: i32,
pub cfgname: Vec<Node>,
pub tokentype: Vec<Node>,
pub dicts: Vec<Node>,
pub r#override: bool,
pub replace: bool,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateFdwStmt {
pub fdwname: String,
pub func_options: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterFdwStmt {
pub fdwname: String,
pub func_options: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreateForeignServerStmt {
pub servername: String,
pub servertype: String,
pub version: String,
pub fdwname: String,
pub if_not_exists: bool,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterForeignServerStmt {
pub servername: String,
pub version: String,
pub options: Vec<Node>,
pub has_version: bool,
}
#[derive(Clone, PartialEq)]
pub struct CreateUserMappingStmt {
pub user: ::core::option::Option<RoleSpec>,
pub servername: String,
pub if_not_exists: bool,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterUserMappingStmt {
pub user: ::core::option::Option<RoleSpec>,
pub servername: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DropUserMappingStmt {
pub user: ::core::option::Option<RoleSpec>,
pub servername: String,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterTableSpaceOptionsStmt {
pub tablespacename: String,
pub options: Vec<Node>,
pub is_reset: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterTableMoveAllStmt {
pub orig_tablespacename: String,
pub objtype: i32,
pub roles: Vec<Node>,
pub new_tablespacename: String,
pub nowait: bool,
}
#[derive(Clone, PartialEq)]
pub struct SecLabelStmt {
pub objtype: i32,
pub object: ::core::option::Option<Box<Node>>,
pub provider: String,
pub label: String,
}
#[derive(Clone, PartialEq)]
pub struct CreateForeignTableStmt {
pub base_stmt: ::core::option::Option<CreateStmt>,
pub servername: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct ImportForeignSchemaStmt {
pub server_name: String,
pub remote_schema: String,
pub local_schema: String,
pub list_type: i32,
pub table_list: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreateExtensionStmt {
pub extname: String,
pub if_not_exists: bool,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterExtensionStmt {
pub extname: String,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterExtensionContentsStmt {
pub extname: String,
pub action: i32,
pub objtype: i32,
pub object: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct CreateEventTrigStmt {
pub trigname: String,
pub eventname: String,
pub whenclause: Vec<Node>,
pub funcname: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterEventTrigStmt {
pub trigname: String,
pub tgenabled: String,
}
#[derive(Clone, PartialEq)]
pub struct RefreshMatViewStmt {
pub concurrent: bool,
pub skip_data: bool,
pub relation: ::core::option::Option<RangeVar>,
}
#[derive(Clone, PartialEq)]
pub struct ReplicaIdentityStmt {
pub identity_type: String,
pub name: String,
}
#[derive(Clone, PartialEq)]
pub struct AlterSystemStmt {
pub setstmt: ::core::option::Option<VariableSetStmt>,
}
#[derive(Clone, PartialEq)]
pub struct CreatePolicyStmt {
pub policy_name: String,
pub table: ::core::option::Option<RangeVar>,
pub cmd_name: String,
pub permissive: bool,
pub roles: Vec<Node>,
pub qual: ::core::option::Option<Box<Node>>,
pub with_check: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct AlterPolicyStmt {
pub policy_name: String,
pub table: ::core::option::Option<RangeVar>,
pub roles: Vec<Node>,
pub qual: ::core::option::Option<Box<Node>>,
pub with_check: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct CreateTransformStmt {
pub replace: bool,
pub type_name: ::core::option::Option<TypeName>,
pub lang: String,
pub fromsql: ::core::option::Option<ObjectWithArgs>,
pub tosql: ::core::option::Option<ObjectWithArgs>,
}
#[derive(Clone, PartialEq)]
pub struct CreateAmStmt {
pub amname: String,
pub handler_name: Vec<Node>,
pub amtype: String,
}
#[derive(Clone, PartialEq)]
pub struct CreatePublicationStmt {
pub pubname: String,
pub options: Vec<Node>,
pub tables: Vec<Node>,
pub for_all_tables: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterPublicationStmt {
pub pubname: String,
pub options: Vec<Node>,
pub tables: Vec<Node>,
pub for_all_tables: bool,
pub table_action: i32,
}
#[derive(Clone, PartialEq)]
pub struct CreateSubscriptionStmt {
pub subname: String,
pub conninfo: String,
pub publication: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AlterSubscriptionStmt {
pub kind: i32,
pub subname: String,
pub conninfo: String,
pub publication: Vec<Node>,
pub options: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct DropSubscriptionStmt {
pub subname: String,
pub missing_ok: bool,
pub behavior: i32,
}
#[derive(Clone, PartialEq)]
pub struct CreateStatsStmt {
pub defnames: Vec<Node>,
pub stat_types: Vec<Node>,
pub exprs: Vec<Node>,
pub relations: Vec<Node>,
pub stxcomment: String,
pub if_not_exists: bool,
}
#[derive(Clone, PartialEq)]
pub struct AlterCollationStmt {
pub collname: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CallStmt {
pub funccall: ::core::option::Option<Box<FuncCall>>,
pub funcexpr: ::core::option::Option<Box<FuncExpr>>,
}
#[derive(Clone, PartialEq)]
pub struct AlterStatsStmt {
pub defnames: Vec<Node>,
pub stxstattarget: i32,
pub missing_ok: bool,
}
#[derive(Clone, PartialEq)]
pub struct AExpr {
pub kind: i32,
pub name: Vec<Node>,
pub lexpr: ::core::option::Option<Box<Node>>,
pub rexpr: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ColumnRef {
pub fields: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ParamRef {
pub number: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct AConst {
pub val: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct FuncCall {
pub funcname: Vec<Node>,
pub args: Vec<Node>,
pub agg_order: Vec<Node>,
pub agg_filter: ::core::option::Option<Box<Node>>,
pub agg_within_group: bool,
pub agg_star: bool,
pub agg_distinct: bool,
pub func_variadic: bool,
pub over: ::core::option::Option<Box<WindowDef>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct AStar {}
#[derive(Clone, PartialEq)]
pub struct AIndices {
pub is_slice: bool,
pub lidx: ::core::option::Option<Box<Node>>,
pub uidx: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct AIndirection {
pub arg: ::core::option::Option<Box<Node>>,
pub indirection: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct AArrayExpr {
pub elements: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ResTarget {
pub name: String,
pub indirection: Vec<Node>,
pub val: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct MultiAssignRef {
pub source: ::core::option::Option<Box<Node>>,
pub colno: i32,
pub ncolumns: i32,
}
#[derive(Clone, PartialEq)]
pub struct TypeCast {
pub arg: ::core::option::Option<Box<Node>>,
pub type_name: ::core::option::Option<TypeName>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CollateClause {
pub arg: ::core::option::Option<Box<Node>>,
pub collname: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct SortBy {
pub node: ::core::option::Option<Box<Node>>,
pub sortby_dir: i32,
pub sortby_nulls: i32,
pub use_op: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct WindowDef {
pub name: String,
pub refname: String,
pub partition_clause: Vec<Node>,
pub order_clause: Vec<Node>,
pub frame_options: i32,
pub start_offset: ::core::option::Option<Box<Node>>,
pub end_offset: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct RangeSubselect {
pub lateral: bool,
pub subquery: ::core::option::Option<Box<Node>>,
pub alias: ::core::option::Option<Alias>,
}
#[derive(Clone, PartialEq)]
pub struct RangeFunction {
pub lateral: bool,
pub ordinality: bool,
pub is_rowsfrom: bool,
pub functions: Vec<Node>,
pub alias: ::core::option::Option<Alias>,
pub coldeflist: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct RangeTableSample {
pub relation: ::core::option::Option<Box<Node>>,
pub method: Vec<Node>,
pub args: Vec<Node>,
pub repeatable: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct RangeTableFunc {
pub lateral: bool,
pub docexpr: ::core::option::Option<Box<Node>>,
pub rowexpr: ::core::option::Option<Box<Node>>,
pub namespaces: Vec<Node>,
pub columns: Vec<Node>,
pub alias: ::core::option::Option<Alias>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct RangeTableFuncCol {
pub colname: String,
pub type_name: ::core::option::Option<TypeName>,
pub for_ordinality: bool,
pub is_not_null: bool,
pub colexpr: ::core::option::Option<Box<Node>>,
pub coldefexpr: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct TypeName {
pub names: Vec<Node>,
pub type_oid: u32,
pub setof: bool,
pub pct_type: bool,
pub typmods: Vec<Node>,
pub typemod: i32,
pub array_bounds: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct ColumnDef {
pub colname: String,
pub type_name: ::core::option::Option<TypeName>,
pub inhcount: i32,
pub is_local: bool,
pub is_not_null: bool,
pub is_from_type: bool,
pub storage: String,
pub raw_default: ::core::option::Option<Box<Node>>,
pub cooked_default: ::core::option::Option<Box<Node>>,
pub identity: String,
pub identity_sequence: ::core::option::Option<RangeVar>,
pub generated: String,
pub coll_clause: ::core::option::Option<Box<CollateClause>>,
pub coll_oid: u32,
pub constraints: Vec<Node>,
pub fdwoptions: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct IndexElem {
pub name: String,
pub expr: ::core::option::Option<Box<Node>>,
pub indexcolname: String,
pub collation: Vec<Node>,
pub opclass: Vec<Node>,
pub opclassopts: Vec<Node>,
pub ordering: i32,
pub nulls_ordering: i32,
}
#[derive(Clone, PartialEq)]
pub struct Constraint {
pub contype: i32,
pub conname: String,
pub deferrable: bool,
pub initdeferred: bool,
pub location: i32,
pub is_no_inherit: bool,
pub raw_expr: ::core::option::Option<Box<Node>>,
pub cooked_expr: String,
pub generated_when: String,
pub keys: Vec<Node>,
pub including: Vec<Node>,
pub exclusions: Vec<Node>,
pub options: Vec<Node>,
pub indexname: String,
pub indexspace: String,
pub reset_default_tblspc: bool,
pub access_method: String,
pub where_clause: ::core::option::Option<Box<Node>>,
pub pktable: ::core::option::Option<RangeVar>,
pub fk_attrs: Vec<Node>,
pub pk_attrs: Vec<Node>,
pub fk_matchtype: String,
pub fk_upd_action: String,
pub fk_del_action: String,
pub old_conpfeqop: Vec<Node>,
pub old_pktable_oid: u32,
pub skip_validation: bool,
pub initially_valid: bool,
}
#[derive(Clone, PartialEq)]
pub struct DefElem {
pub defnamespace: String,
pub defname: String,
pub arg: ::core::option::Option<Box<Node>>,
pub defaction: i32,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct RangeTblEntry {
pub rtekind: i32,
pub relid: u32,
pub relkind: String,
pub rellockmode: i32,
pub tablesample: ::core::option::Option<Box<TableSampleClause>>,
pub subquery: ::core::option::Option<Box<Query>>,
pub security_barrier: bool,
pub jointype: i32,
pub joinmergedcols: i32,
pub joinaliasvars: Vec<Node>,
pub joinleftcols: Vec<Node>,
pub joinrightcols: Vec<Node>,
pub functions: Vec<Node>,
pub funcordinality: bool,
pub tablefunc: ::core::option::Option<Box<TableFunc>>,
pub values_lists: Vec<Node>,
pub ctename: String,
pub ctelevelsup: u32,
pub self_reference: bool,
pub coltypes: Vec<Node>,
pub coltypmods: Vec<Node>,
pub colcollations: Vec<Node>,
pub enrname: String,
pub enrtuples: f64,
pub alias: ::core::option::Option<Alias>,
pub eref: ::core::option::Option<Alias>,
pub lateral: bool,
pub inh: bool,
pub in_from_cl: bool,
pub required_perms: u32,
pub check_as_user: u32,
pub selected_cols: Vec<u64>,
pub inserted_cols: Vec<u64>,
pub updated_cols: Vec<u64>,
pub extra_updated_cols: Vec<u64>,
pub security_quals: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct RangeTblFunction {
pub funcexpr: ::core::option::Option<Box<Node>>,
pub funccolcount: i32,
pub funccolnames: Vec<Node>,
pub funccoltypes: Vec<Node>,
pub funccoltypmods: Vec<Node>,
pub funccolcollations: Vec<Node>,
pub funcparams: Vec<u64>,
}
#[derive(Clone, PartialEq)]
pub struct TableSampleClause {
pub tsmhandler: u32,
pub args: Vec<Node>,
pub repeatable: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct WithCheckOption {
pub kind: i32,
pub relname: String,
pub polname: String,
pub qual: ::core::option::Option<Box<Node>>,
pub cascaded: bool,
}
#[derive(Clone, PartialEq)]
pub struct SortGroupClause {
pub tle_sort_group_ref: u32,
pub eqop: u32,
pub sortop: u32,
pub nulls_first: bool,
pub hashable: bool,
}
#[derive(Clone, PartialEq)]
pub struct GroupingSet {
pub kind: i32,
pub content: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct WindowClause {
pub name: String,
pub refname: String,
pub partition_clause: Vec<Node>,
pub order_clause: Vec<Node>,
pub frame_options: i32,
pub start_offset: ::core::option::Option<Box<Node>>,
pub end_offset: ::core::option::Option<Box<Node>>,
pub start_in_range_func: u32,
pub end_in_range_func: u32,
pub in_range_coll: u32,
pub in_range_asc: bool,
pub in_range_nulls_first: bool,
pub winref: u32,
pub copied_order: bool,
}
#[derive(Clone, PartialEq)]
pub struct ObjectWithArgs {
pub objname: Vec<Node>,
pub objargs: Vec<Node>,
pub args_unspecified: bool,
}
#[derive(Clone, PartialEq)]
pub struct AccessPriv {
pub priv_name: String,
pub cols: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct CreateOpClassItem {
pub itemtype: i32,
pub name: ::core::option::Option<ObjectWithArgs>,
pub number: i32,
pub order_family: Vec<Node>,
pub class_args: Vec<Node>,
pub storedtype: ::core::option::Option<TypeName>,
}
#[derive(Clone, PartialEq)]
pub struct TableLikeClause {
pub relation: ::core::option::Option<RangeVar>,
pub options: u32,
pub relation_oid: u32,
}
#[derive(Clone, PartialEq)]
pub struct FunctionParameter {
pub name: String,
pub arg_type: ::core::option::Option<TypeName>,
pub mode: i32,
pub defexpr: ::core::option::Option<Box<Node>>,
}
#[derive(Clone, PartialEq)]
pub struct LockingClause {
pub locked_rels: Vec<Node>,
pub strength: i32,
pub wait_policy: i32,
}
#[derive(Clone, PartialEq)]
pub struct RowMarkClause {
pub rti: u32,
pub strength: i32,
pub wait_policy: i32,
pub pushed_down: bool,
}
#[derive(Clone, PartialEq)]
pub struct XmlSerialize {
pub xmloption: i32,
pub expr: ::core::option::Option<Box<Node>>,
pub type_name: ::core::option::Option<TypeName>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct WithClause {
pub ctes: Vec<Node>,
pub recursive: bool,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct InferClause {
pub index_elems: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
pub conname: String,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct OnConflictClause {
pub action: i32,
pub infer: ::core::option::Option<Box<InferClause>>,
pub target_list: Vec<Node>,
pub where_clause: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct CommonTableExpr {
pub ctename: String,
pub aliascolnames: Vec<Node>,
pub ctematerialized: i32,
pub ctequery: ::core::option::Option<Box<Node>>,
pub location: i32,
pub cterecursive: bool,
pub cterefcount: i32,
pub ctecolnames: Vec<Node>,
pub ctecoltypes: Vec<Node>,
pub ctecoltypmods: Vec<Node>,
pub ctecolcollations: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct RoleSpec {
pub roletype: i32,
pub rolename: String,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct TriggerTransition {
pub name: String,
pub is_new: bool,
pub is_table: bool,
}
#[derive(Clone, PartialEq)]
pub struct PartitionElem {
pub name: String,
pub expr: ::core::option::Option<Box<Node>>,
pub collation: Vec<Node>,
pub opclass: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct PartitionSpec {
pub strategy: String,
pub part_params: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct PartitionBoundSpec {
pub strategy: String,
pub is_default: bool,
pub modulus: i32,
pub remainder: i32,
pub listdatums: Vec<Node>,
pub lowerdatums: Vec<Node>,
pub upperdatums: Vec<Node>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct PartitionRangeDatum {
pub kind: i32,
pub value: ::core::option::Option<Box<Node>>,
pub location: i32,
}
#[derive(Clone, PartialEq)]
pub struct PartitionCmd {
pub name: ::core::option::Option<RangeVar>,
pub bound: ::core::option::Option<PartitionBoundSpec>,
}
#[derive(Clone, PartialEq)]
pub struct VacuumRelation {
pub relation: ::core::option::Option<RangeVar>,
pub oid: u32,
pub va_cols: Vec<Node>,
}
#[derive(Clone, PartialEq)]
pub struct InlineCodeBlock {
pub source_text: String,
pub lang_oid: u32,
pub lang_is_trusted: bool,
pub atomic: bool,
}
#[derive(Clone, PartialEq)]
pub struct CallContext {
pub atomic: bool,
}
#[derive(Clone, PartialEq)]
pub struct ScanToken {
pub start: i32,
pub end: i32,
pub token: i32,
pub keyword_kind: i32,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum OverridingKind {
Undefined = 0,
OverridingNotSet = 1,
OverridingUserValue = 2,
OverridingSystemValue = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum QuerySource {
Undefined = 0,
QsrcOriginal = 1,
QsrcParser = 2,
QsrcInsteadRule = 3,
QsrcQualInsteadRule = 4,
QsrcNonInsteadRule = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SortByDir {
Undefined = 0,
SortbyDefault = 1,
SortbyAsc = 2,
SortbyDesc = 3,
SortbyUsing = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SortByNulls {
Undefined = 0,
SortbyNullsDefault = 1,
SortbyNullsFirst = 2,
SortbyNullsLast = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum AExprKind {
Undefined = 0,
AexprOp = 1,
AexprOpAny = 2,
AexprOpAll = 3,
AexprDistinct = 4,
AexprNotDistinct = 5,
AexprNullif = 6,
AexprOf = 7,
AexprIn = 8,
AexprLike = 9,
AexprIlike = 10,
AexprSimilar = 11,
AexprBetween = 12,
AexprNotBetween = 13,
AexprBetweenSym = 14,
AexprNotBetweenSym = 15,
AexprParen = 16,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum RoleSpecType {
Undefined = 0,
RolespecCstring = 1,
RolespecCurrentUser = 2,
RolespecSessionUser = 3,
RolespecPublic = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum TableLikeOption {
Undefined = 0,
CreateTableLikeComments = 1,
CreateTableLikeConstraints = 2,
CreateTableLikeDefaults = 3,
CreateTableLikeGenerated = 4,
CreateTableLikeIdentity = 5,
CreateTableLikeIndexes = 6,
CreateTableLikeStatistics = 7,
CreateTableLikeStorage = 8,
CreateTableLikeAll = 9,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum DefElemAction {
Undefined = 0,
DefelemUnspec = 1,
DefelemSet = 2,
DefelemAdd = 3,
DefelemDrop = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum PartitionRangeDatumKind {
Undefined = 0,
PartitionRangeDatumMinvalue = 1,
PartitionRangeDatumValue = 2,
PartitionRangeDatumMaxvalue = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum RteKind {
RtekindUndefined = 0,
RteRelation = 1,
RteSubquery = 2,
RteJoin = 3,
RteFunction = 4,
RteTablefunc = 5,
RteValues = 6,
RteCte = 7,
RteNamedtuplestore = 8,
RteResult = 9,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum WcoKind {
WcokindUndefined = 0,
WcoViewCheck = 1,
WcoRlsInsertCheck = 2,
WcoRlsUpdateCheck = 3,
WcoRlsConflictCheck = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum GroupingSetKind {
Undefined = 0,
GroupingSetEmpty = 1,
GroupingSetSimple = 2,
GroupingSetRollup = 3,
GroupingSetCube = 4,
GroupingSetSets = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum CteMaterialize {
CtematerializeUndefined = 0,
Default = 1,
Always = 2,
Never = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SetOperation {
Undefined = 0,
SetopNone = 1,
SetopUnion = 2,
SetopIntersect = 3,
SetopExcept = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ObjectType {
Undefined = 0,
ObjectAccessMethod = 1,
ObjectAggregate = 2,
ObjectAmop = 3,
ObjectAmproc = 4,
ObjectAttribute = 5,
ObjectCast = 6,
ObjectColumn = 7,
ObjectCollation = 8,
ObjectConversion = 9,
ObjectDatabase = 10,
ObjectDefault = 11,
ObjectDefacl = 12,
ObjectDomain = 13,
ObjectDomconstraint = 14,
ObjectEventTrigger = 15,
ObjectExtension = 16,
ObjectFdw = 17,
ObjectForeignServer = 18,
ObjectForeignTable = 19,
ObjectFunction = 20,
ObjectIndex = 21,
ObjectLanguage = 22,
ObjectLargeobject = 23,
ObjectMatview = 24,
ObjectOpclass = 25,
ObjectOperator = 26,
ObjectOpfamily = 27,
ObjectPolicy = 28,
ObjectProcedure = 29,
ObjectPublication = 30,
ObjectPublicationRel = 31,
ObjectRole = 32,
ObjectRoutine = 33,
ObjectRule = 34,
ObjectSchema = 35,
ObjectSequence = 36,
ObjectSubscription = 37,
ObjectStatisticExt = 38,
ObjectTabconstraint = 39,
ObjectTable = 40,
ObjectTablespace = 41,
ObjectTransform = 42,
ObjectTrigger = 43,
ObjectTsconfiguration = 44,
ObjectTsdictionary = 45,
ObjectTsparser = 46,
ObjectTstemplate = 47,
ObjectType = 48,
ObjectUserMapping = 49,
ObjectView = 50,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum DropBehavior {
Undefined = 0,
DropRestrict = 1,
DropCascade = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum AlterTableType {
Undefined = 0,
AtAddColumn = 1,
AtAddColumnRecurse = 2,
AtAddColumnToView = 3,
AtColumnDefault = 4,
AtCookedColumnDefault = 5,
AtDropNotNull = 6,
AtSetNotNull = 7,
AtDropExpression = 8,
AtCheckNotNull = 9,
AtSetStatistics = 10,
AtSetOptions = 11,
AtResetOptions = 12,
AtSetStorage = 13,
AtDropColumn = 14,
AtDropColumnRecurse = 15,
AtAddIndex = 16,
AtReAddIndex = 17,
AtAddConstraint = 18,
AtAddConstraintRecurse = 19,
AtReAddConstraint = 20,
AtReAddDomainConstraint = 21,
AtAlterConstraint = 22,
AtValidateConstraint = 23,
AtValidateConstraintRecurse = 24,
AtAddIndexConstraint = 25,
AtDropConstraint = 26,
AtDropConstraintRecurse = 27,
AtReAddComment = 28,
AtAlterColumnType = 29,
AtAlterColumnGenericOptions = 30,
AtChangeOwner = 31,
AtClusterOn = 32,
AtDropCluster = 33,
AtSetLogged = 34,
AtSetUnLogged = 35,
AtDropOids = 36,
AtSetTableSpace = 37,
AtSetRelOptions = 38,
AtResetRelOptions = 39,
AtReplaceRelOptions = 40,
AtEnableTrig = 41,
AtEnableAlwaysTrig = 42,
AtEnableReplicaTrig = 43,
AtDisableTrig = 44,
AtEnableTrigAll = 45,
AtDisableTrigAll = 46,
AtEnableTrigUser = 47,
AtDisableTrigUser = 48,
AtEnableRule = 49,
AtEnableAlwaysRule = 50,
AtEnableReplicaRule = 51,
AtDisableRule = 52,
AtAddInherit = 53,
AtDropInherit = 54,
AtAddOf = 55,
AtDropOf = 56,
AtReplicaIdentity = 57,
AtEnableRowSecurity = 58,
AtDisableRowSecurity = 59,
AtForceRowSecurity = 60,
AtNoForceRowSecurity = 61,
AtGenericOptions = 62,
AtAttachPartition = 63,
AtDetachPartition = 64,
AtAddIdentity = 65,
AtSetIdentity = 66,
AtDropIdentity = 67,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum GrantTargetType {
Undefined = 0,
AclTargetObject = 1,
AclTargetAllInSchema = 2,
AclTargetDefaults = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum VariableSetKind {
Undefined = 0,
VarSetValue = 1,
VarSetDefault = 2,
VarSetCurrent = 3,
VarSetMulti = 4,
VarReset = 5,
VarResetAll = 6,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ConstrType {
Undefined = 0,
ConstrNull = 1,
ConstrNotnull = 2,
ConstrDefault = 3,
ConstrIdentity = 4,
ConstrGenerated = 5,
ConstrCheck = 6,
ConstrPrimary = 7,
ConstrUnique = 8,
ConstrExclusion = 9,
ConstrForeign = 10,
ConstrAttrDeferrable = 11,
ConstrAttrNotDeferrable = 12,
ConstrAttrDeferred = 13,
ConstrAttrImmediate = 14,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ImportForeignSchemaType {
Undefined = 0,
FdwImportSchemaAll = 1,
FdwImportSchemaLimitTo = 2,
FdwImportSchemaExcept = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum RoleStmtType {
Undefined = 0,
RolestmtRole = 1,
RolestmtUser = 2,
RolestmtGroup = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum FetchDirection {
Undefined = 0,
FetchForward = 1,
FetchBackward = 2,
FetchAbsolute = 3,
FetchRelative = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum FunctionParameterMode {
Undefined = 0,
FuncParamIn = 1,
FuncParamOut = 2,
FuncParamInout = 3,
FuncParamVariadic = 4,
FuncParamTable = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum TransactionStmtKind {
Undefined = 0,
TransStmtBegin = 1,
TransStmtStart = 2,
TransStmtCommit = 3,
TransStmtRollback = 4,
TransStmtSavepoint = 5,
TransStmtRelease = 6,
TransStmtRollbackTo = 7,
TransStmtPrepare = 8,
TransStmtCommitPrepared = 9,
TransStmtRollbackPrepared = 10,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ViewCheckOption {
Undefined = 0,
NoCheckOption = 1,
LocalCheckOption = 2,
CascadedCheckOption = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ClusterOption {
Undefined = 0,
CluoptRecheck = 1,
CluoptVerbose = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum DiscardMode {
Undefined = 0,
DiscardAll = 1,
DiscardPlans = 2,
DiscardSequences = 3,
DiscardTemp = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ReindexObjectType {
Undefined = 0,
ReindexObjectIndex = 1,
ReindexObjectTable = 2,
ReindexObjectSchema = 3,
ReindexObjectSystem = 4,
ReindexObjectDatabase = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum AlterTsConfigType {
AlterTsconfigTypeUndefined = 0,
AlterTsconfigAddMapping = 1,
AlterTsconfigAlterMappingForToken = 2,
AlterTsconfigReplaceDict = 3,
AlterTsconfigReplaceDictForToken = 4,
AlterTsconfigDropMapping = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum AlterSubscriptionType {
Undefined = 0,
AlterSubscriptionOptions = 1,
AlterSubscriptionConnection = 2,
AlterSubscriptionPublication = 3,
AlterSubscriptionRefresh = 4,
AlterSubscriptionEnabled = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum OnCommitAction {
Undefined = 0,
OncommitNoop = 1,
OncommitPreserveRows = 2,
OncommitDeleteRows = 3,
OncommitDrop = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum ParamKind {
Undefined = 0,
ParamExtern = 1,
ParamExec = 2,
ParamSublink = 3,
ParamMultiexpr = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum CoercionContext {
Undefined = 0,
CoercionImplicit = 1,
CoercionAssignment = 2,
CoercionExplicit = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum CoercionForm {
Undefined = 0,
CoerceExplicitCall = 1,
CoerceExplicitCast = 2,
CoerceImplicitCast = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum BoolExprType {
Undefined = 0,
AndExpr = 1,
OrExpr = 2,
NotExpr = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SubLinkType {
Undefined = 0,
ExistsSublink = 1,
AllSublink = 2,
AnySublink = 3,
RowcompareSublink = 4,
ExprSublink = 5,
MultiexprSublink = 6,
ArraySublink = 7,
CteSublink = 8,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum RowCompareType {
Undefined = 0,
RowcompareLt = 1,
RowcompareLe = 2,
RowcompareEq = 3,
RowcompareGe = 4,
RowcompareGt = 5,
RowcompareNe = 6,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum MinMaxOp {
Undefined = 0,
IsGreatest = 1,
IsLeast = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SqlValueFunctionOp {
SqlvalueFunctionOpUndefined = 0,
SvfopCurrentDate = 1,
SvfopCurrentTime = 2,
SvfopCurrentTimeN = 3,
SvfopCurrentTimestamp = 4,
SvfopCurrentTimestampN = 5,
SvfopLocaltime = 6,
SvfopLocaltimeN = 7,
SvfopLocaltimestamp = 8,
SvfopLocaltimestampN = 9,
SvfopCurrentRole = 10,
SvfopCurrentUser = 11,
SvfopUser = 12,
SvfopSessionUser = 13,
SvfopCurrentCatalog = 14,
SvfopCurrentSchema = 15,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum XmlExprOp {
Undefined = 0,
IsXmlconcat = 1,
IsXmlelement = 2,
IsXmlforest = 3,
IsXmlparse = 4,
IsXmlpi = 5,
IsXmlroot = 6,
IsXmlserialize = 7,
IsDocument = 8,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum XmlOptionType {
Undefined = 0,
XmloptionDocument = 1,
XmloptionContent = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum NullTestType {
Undefined = 0,
IsNull = 1,
IsNotNull = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum BoolTestType {
Undefined = 0,
IsTrue = 1,
IsNotTrue = 2,
IsFalse = 3,
IsNotFalse = 4,
IsUnknown = 5,
IsNotUnknown = 6,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum CmdType {
Undefined = 0,
CmdUnknown = 1,
CmdSelect = 2,
CmdUpdate = 3,
CmdInsert = 4,
CmdDelete = 5,
CmdUtility = 6,
CmdNothing = 7,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum JoinType {
Undefined = 0,
JoinInner = 1,
JoinLeft = 2,
JoinFull = 3,
JoinRight = 4,
JoinSemi = 5,
JoinAnti = 6,
JoinUniqueOuter = 7,
JoinUniqueInner = 8,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum AggStrategy {
Undefined = 0,
AggPlain = 1,
AggSorted = 2,
AggHashed = 3,
AggMixed = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum AggSplit {
Undefined = 0,
AggsplitSimple = 1,
AggsplitInitialSerial = 2,
AggsplitFinalDeserial = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SetOpCmd {
Undefined = 0,
SetopcmdIntersect = 1,
SetopcmdIntersectAll = 2,
SetopcmdExcept = 3,
SetopcmdExceptAll = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum SetOpStrategy {
Undefined = 0,
SetopSorted = 1,
SetopHashed = 2,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum OnConflictAction {
Undefined = 0,
OnconflictNone = 1,
OnconflictNothing = 2,
OnconflictUpdate = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum LimitOption {
Undefined = 0,
Default = 1,
Count = 2,
WithTies = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum LockClauseStrength {
Undefined = 0,
LcsNone = 1,
LcsForkeyshare = 2,
LcsForshare = 3,
LcsFornokeyupdate = 4,
LcsForupdate = 5,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum LockWaitPolicy {
Undefined = 0,
LockWaitBlock = 1,
LockWaitSkip = 2,
LockWaitError = 3,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum LockTupleMode {
Undefined = 0,
LockTupleKeyShare = 1,
LockTupleShare = 2,
LockTupleNoKeyExclusive = 3,
LockTupleExclusive = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum KeywordKind {
NoKeyword = 0,
UnreservedKeyword = 1,
ColNameKeyword = 2,
TypeFuncNameKeyword = 3,
ReservedKeyword = 4,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[repr(i32)]
pub enum Token {
Nul = 0,
/// Single-character tokens that are returned 1:1 (identical with "self" list in scan.l)
/// Either supporting syntax, or single-character operators (some can be both)
/// Also see <https://www.postgresql.org/docs/12/sql-syntax-lexical.html#SQL-SYNTAX-SPECIAL-CHARS>
///
/// "%"
Ascii37 = 37,
/// "("
Ascii40 = 40,
/// ")"
Ascii41 = 41,
/// "*"
Ascii42 = 42,
/// "+"
Ascii43 = 43,
/// ","
Ascii44 = 44,
/// "-"
Ascii45 = 45,
/// "."
Ascii46 = 46,
/// "/"
Ascii47 = 47,
/// ":"
Ascii58 = 58,
/// ";"
Ascii59 = 59,
/// "<"
Ascii60 = 60,
/// "="
Ascii61 = 61,
/// ">"
Ascii62 = 62,
/// "?"
Ascii63 = 63,
/// "["
Ascii91 = 91,
/// "\"
Ascii92 = 92,
/// "]"
Ascii93 = 93,
/// "^"
Ascii94 = 94,
/// Named tokens in scan.l
Ident = 258,
Uident = 259,
Fconst = 260,
Sconst = 261,
Usconst = 262,
Bconst = 263,
Xconst = 264,
Op = 265,
Iconst = 266,
Param = 267,
Typecast = 268,
DotDot = 269,
ColonEquals = 270,
EqualsGreater = 271,
LessEquals = 272,
GreaterEquals = 273,
NotEquals = 274,
SqlComment = 275,
CComment = 276,
AbortP = 277,
AbsoluteP = 278,
Access = 279,
Action = 280,
AddP = 281,
Admin = 282,
After = 283,
Aggregate = 284,
All = 285,
Also = 286,
Alter = 287,
Always = 288,
Analyse = 289,
Analyze = 290,
And = 291,
Any = 292,
Array = 293,
As = 294,
Asc = 295,
Assertion = 296,
Assignment = 297,
Asymmetric = 298,
At = 299,
Attach = 300,
Attribute = 301,
Authorization = 302,
Backward = 303,
Before = 304,
BeginP = 305,
Between = 306,
Bigint = 307,
Binary = 308,
Bit = 309,
BooleanP = 310,
Both = 311,
By = 312,
Cache = 313,
Call = 314,
Called = 315,
Cascade = 316,
Cascaded = 317,
Case = 318,
Cast = 319,
CatalogP = 320,
Chain = 321,
CharP = 322,
Character = 323,
Characteristics = 324,
Check = 325,
Checkpoint = 326,
Class = 327,
Close = 328,
Cluster = 329,
Coalesce = 330,
Collate = 331,
Collation = 332,
Column = 333,
Columns = 334,
Comment = 335,
Comments = 336,
Commit = 337,
Committed = 338,
Concurrently = 339,
Configuration = 340,
Conflict = 341,
Connection = 342,
Constraint = 343,
Constraints = 344,
ContentP = 345,
ContinueP = 346,
ConversionP = 347,
Copy = 348,
Cost = 349,
Create = 350,
Cross = 351,
Csv = 352,
Cube = 353,
CurrentP = 354,
CurrentCatalog = 355,
CurrentDate = 356,
CurrentRole = 357,
CurrentSchema = 358,
CurrentTime = 359,
CurrentTimestamp = 360,
CurrentUser = 361,
Cursor = 362,
Cycle = 363,
DataP = 364,
Database = 365,
DayP = 366,
Deallocate = 367,
Dec = 368,
DecimalP = 369,
Declare = 370,
Default = 371,
Defaults = 372,
Deferrable = 373,
Deferred = 374,
Definer = 375,
DeleteP = 376,
Delimiter = 377,
Delimiters = 378,
Depends = 379,
Desc = 380,
Detach = 381,
Dictionary = 382,
DisableP = 383,
Discard = 384,
Distinct = 385,
Do = 386,
DocumentP = 387,
DomainP = 388,
DoubleP = 389,
Drop = 390,
Each = 391,
Else = 392,
EnableP = 393,
Encoding = 394,
Encrypted = 395,
EndP = 396,
EnumP = 397,
Escape = 398,
Event = 399,
Except = 400,
Exclude = 401,
Excluding = 402,
Exclusive = 403,
Execute = 404,
Exists = 405,
Explain = 406,
Expression = 407,
Extension = 408,
External = 409,
Extract = 410,
FalseP = 411,
Family = 412,
Fetch = 413,
Filter = 414,
FirstP = 415,
FloatP = 416,
Following = 417,
For = 418,
Force = 419,
Foreign = 420,
Forward = 421,
Freeze = 422,
From = 423,
Full = 424,
Function = 425,
Functions = 426,
Generated = 427,
Global = 428,
Grant = 429,
Granted = 430,
Greatest = 431,
GroupP = 432,
Grouping = 433,
Groups = 434,
Handler = 435,
Having = 436,
HeaderP = 437,
Hold = 438,
HourP = 439,
IdentityP = 440,
IfP = 441,
Ilike = 442,
Immediate = 443,
Immutable = 444,
ImplicitP = 445,
ImportP = 446,
InP = 447,
Include = 448,
Including = 449,
Increment = 450,
Index = 451,
Indexes = 452,
Inherit = 453,
Inherits = 454,
Initially = 455,
InlineP = 456,
InnerP = 457,
Inout = 458,
InputP = 459,
Insensitive = 460,
Insert = 461,
Instead = 462,
IntP = 463,
Integer = 464,
Intersect = 465,
Interval = 466,
Into = 467,
Invoker = 468,
Is = 469,
Isnull = 470,
Isolation = 471,
Join = 472,
Key = 473,
Label = 474,
Language = 475,
LargeP = 476,
LastP = 477,
LateralP = 478,
Leading = 479,
Leakproof = 480,
Least = 481,
Left = 482,
Level = 483,
Like = 484,
Limit = 485,
Listen = 486,
Load = 487,
Local = 488,
Localtime = 489,
Localtimestamp = 490,
Location = 491,
LockP = 492,
Locked = 493,
Logged = 494,
Mapping = 495,
Match = 496,
Materialized = 497,
Maxvalue = 498,
Method = 499,
MinuteP = 500,
Minvalue = 501,
Mode = 502,
MonthP = 503,
Move = 504,
NameP = 505,
Names = 506,
National = 507,
Natural = 508,
Nchar = 509,
New = 510,
Next = 511,
Nfc = 512,
Nfd = 513,
Nfkc = 514,
Nfkd = 515,
No = 516,
None = 517,
Normalize = 518,
Normalized = 519,
Not = 520,
Nothing = 521,
Notify = 522,
Notnull = 523,
Nowait = 524,
NullP = 525,
Nullif = 526,
NullsP = 527,
Numeric = 528,
ObjectP = 529,
Of = 530,
Off = 531,
Offset = 532,
Oids = 533,
Old = 534,
On = 535,
Only = 536,
Operator = 537,
Option = 538,
Options = 539,
Or = 540,
Order = 541,
Ordinality = 542,
Others = 543,
OutP = 544,
OuterP = 545,
Over = 546,
Overlaps = 547,
Overlay = 548,
Overriding = 549,
Owned = 550,
Owner = 551,
Parallel = 552,
Parser = 553,
Partial = 554,
Partition = 555,
Passing = 556,
Password = 557,
Placing = 558,
Plans = 559,
Policy = 560,
Position = 561,
Preceding = 562,
Precision = 563,
Preserve = 564,
Prepare = 565,
Prepared = 566,
Primary = 567,
Prior = 568,
Privileges = 569,
Procedural = 570,
Procedure = 571,
Procedures = 572,
Program = 573,
Publication = 574,
Quote = 575,
Range = 576,
Read = 577,
Real = 578,
Reassign = 579,
Recheck = 580,
Recursive = 581,
Ref = 582,
References = 583,
Referencing = 584,
Refresh = 585,
Reindex = 586,
RelativeP = 587,
Release = 588,
Rename = 589,
Repeatable = 590,
Replace = 591,
Replica = 592,
Reset = 593,
Restart = 594,
Restrict = 595,
Returning = 596,
Returns = 597,
Revoke = 598,
Right = 599,
Role = 600,
Rollback = 601,
Rollup = 602,
Routine = 603,
Routines = 604,
Row = 605,
Rows = 606,
Rule = 607,
Savepoint = 608,
Schema = 609,
Schemas = 610,
Scroll = 611,
Search = 612,
SecondP = 613,
Security = 614,
Select = 615,
Sequence = 616,
Sequences = 617,
Serializable = 618,
Server = 619,
Session = 620,
SessionUser = 621,
Set = 622,
Sets = 623,
Setof = 624,
Share = 625,
Show = 626,
Similar = 627,
Simple = 628,
Skip = 629,
Smallint = 630,
Snapshot = 631,
Some = 632,
SqlP = 633,
Stable = 634,
StandaloneP = 635,
Start = 636,
Statement = 637,
Statistics = 638,
Stdin = 639,
Stdout = 640,
Storage = 641,
Stored = 642,
StrictP = 643,
StripP = 644,
Subscription = 645,
Substring = 646,
Support = 647,
Symmetric = 648,
Sysid = 649,
SystemP = 650,
Table = 651,
Tables = 652,
Tablesample = 653,
Tablespace = 654,
Temp = 655,
Template = 656,
Temporary = 657,
TextP = 658,
Then = 659,
Ties = 660,
Time = 661,
Timestamp = 662,
To = 663,
Trailing = 664,
Transaction = 665,
Transform = 666,
Treat = 667,
Trigger = 668,
Trim = 669,
TrueP = 670,
Truncate = 671,
Trusted = 672,
TypeP = 673,
TypesP = 674,
Uescape = 675,
Unbounded = 676,
Uncommitted = 677,
Unencrypted = 678,
Union = 679,
Unique = 680,
Unknown = 681,
Unlisten = 682,
Unlogged = 683,
Until = 684,
Update = 685,
User = 686,
Using = 687,
Vacuum = 688,
Valid = 689,
Validate = 690,
Validator = 691,
ValueP = 692,
Values = 693,
Varchar = 694,
Variadic = 695,
Varying = 696,
Verbose = 697,
VersionP = 698,
View = 699,
Views = 700,
Volatile = 701,
When = 702,
Where = 703,
WhitespaceP = 704,
Window = 705,
With = 706,
Within = 707,
Without = 708,
Work = 709,
Wrapper = 710,
Write = 711,
XmlP = 712,
Xmlattributes = 713,
Xmlconcat = 714,
Xmlelement = 715,
Xmlexists = 716,
Xmlforest = 717,
Xmlnamespaces = 718,
Xmlparse = 719,
Xmlpi = 720,
Xmlroot = 721,
Xmlserialize = 722,
Xmltable = 723,
YearP = 724,
YesP = 725,
Zone = 726,
NotLa = 727,
NullsLa = 728,
WithLa = 729,
Postfixop = 730,
Uminus = 731,
}
@@ -0,0 +1,69 @@
// #5215
struct MyTuple(
/// Doc Comments
/* TODO note to add more to Doc Comments */
u32,
/// Doc Comments
// TODO note
u64,
);
struct MyTuple(
#[cfg(unix)] // some comment
u64,
#[cfg(not(unix))] /*block comment */ u32,
);
struct MyTuple(
#[cfg(unix)]
// some comment
u64,
#[cfg(not(unix))]
/*block comment */
u32,
);
struct MyTuple(
#[cfg(unix)] // some comment
pub u64,
#[cfg(not(unix))] /*block comment */ pub(crate) u32,
);
struct MyTuple(
/// Doc Comments
/* TODO note to add more to Doc Comments */
pub u32,
/// Doc Comments
// TODO note
pub(crate) u64,
);
struct MyStruct {
#[cfg(unix)] // some comment
a: u64,
#[cfg(not(unix))] /*block comment */ b: u32,
}
struct MyStruct {
#[cfg(unix)] // some comment
pub a: u64,
#[cfg(not(unix))] /*block comment */ pub(crate) b: u32,
}
struct MyStruct {
/// Doc Comments
/* TODO note to add more to Doc Comments */
a: u32,
/// Doc Comments
// TODO note
b: u64,
}
struct MyStruct {
/// Doc Comments
/* TODO note to add more to Doc Comments */
pub a: u32,
/// Doc Comments
// TODO note
pub(crate) b: u64,
}