1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
//! This crate implement `liberty` data structre in Rust.
//! <script>
//! IFRAME('https://zao111222333.github.io/liberty-db/2020.09/reference_manual.html');
//! </script>

#![doc(
    // The following are document setting according to
    // https://doc.rust-lang.org/rustdoc/write-documentation/the-doc-attribute.html
    // For html-pdf-viewer setting:
    // https://tinytip.co/tips/html-pdf-params/
    // html_favicon_url = "https://example.com/favicon.ico",
    // html_logo_url = "https://example.com/logo.jpg",
    html_playground_url = "https://play.rust-lang.org",
)]
// #![cfg_attr(
//     feature = "nightly",
//     feature(
//         test,
//         core_intrinsics,
//         dropck_eyepatch,
//         min_specialization,
//         extend_one,
//         allocator_api,
//         slice_ptr_get,
//         nonnull_slice_from_raw_parts,
//         maybe_uninit_array_assume_init,
//         build_hasher_simple_hash_one
//     )
// )]
#![deny(
    // The following are allowed by default lints according to
    // https://doc.rust-lang.org/rustc/lints/listing/allowed-by-default.html
    anonymous_parameters,
    bare_trait_objects,
    // box_pointers,
    elided_lifetimes_in_paths, // allow anonymous lifetime
    missing_debug_implementations,
    // missing_docs, // TODO: add documents
    // trivial_casts, // TODO: remove trivial casts in code
    trivial_numeric_casts,
    // unsafe_code,
    unstable_features,
    unused_extern_crates,
    unused_import_braces,
    unreachable_pub, // allow clippy::redundant_pub_crate lint instead
    // unused_qualifications,
    unused_results, // TODO: fix unused results
    variant_size_differences,
    // warnings, // treat all wanings as errors
    clippy::all,
    clippy::restriction,
    clippy::pedantic,
    clippy::nursery,
    clippy::cargo
)]
#![allow(
    // Some explicitly allowed Clippy lints, must have clear reason to allow
    clippy::pattern_type_mismatch, // TODO: 
    clippy::partial_pub_fields,
    clippy::single_char_lifetime_names,
    clippy::while_let_on_iterator,
    clippy::iter_over_hash_type,
    clippy::separated_literal_suffix,
    clippy::single_call_fn,
    clippy::pub_use,
    clippy::pub_with_shorthand,
    clippy::ignored_unit_patterns,
    clippy::mod_module_files,
    clippy::unreachable,
    clippy::missing_trait_methods,
    clippy::min_ident_chars,
    clippy::missing_docs_in_private_items,
    clippy::blanket_clippy_restriction_lints, // allow clippy::restriction
    clippy::implicit_return, // actually omitting the return keyword is idiomatic Rust code
    clippy::module_name_repetitions, // repeation of module name in a struct name is not big deal
    clippy::multiple_crate_versions, // multi-version dependency crates is not able to fix
    clippy::panic, // allow debug_assert, panic in production code
    clippy::panic_in_result_fn,
    clippy::missing_errors_doc, // TODO: add error docs
    clippy::exhaustive_structs,
    clippy::exhaustive_enums,
    clippy::missing_panics_doc, // TODO: add panic docs
    clippy::panic_in_result_fn,
    clippy::print_stdout,
    clippy::absolute_paths,
    clippy::use_debug,
    clippy::question_mark_used,
    clippy::used_underscore_binding,
)]
#![warn(
    clippy::todo,
    clippy::manual_map,
    clippy::shadow_reuse,
    clippy::option_if_let_else,
    clippy::wildcard_enum_match_arm,
    clippy::needless_return,
    clippy::same_name_method,
    clippy::missing_inline_in_public_items,
    clippy::doc_markdown,
    dead_code,
    missing_copy_implementations, // Copy may cause unnecessary memory copy
    // missing_docs,
    // single_use_lifetimes, // TODO: fix lifetime names only used once
    unused_qualifications,
)]
#![cfg_attr(
  test,
  allow(
    dead_code,
    unused,
    unused_imports,
    unused_results,
    clippy::unwrap_used,
    clippy::expect_used,
    clippy::too_many_lines,
    clippy::non_ascii_literal,
    clippy::must_use_candidate,
    clippy::needless_raw_strings,
    clippy::cast_possible_truncation,
    clippy::as_conversions,
    clippy::needless_raw_string_hashes,
    clippy::indexing_slicing,
    clippy::arithmetic_side_effects,
    clippy::field_reassign_with_default,
  )
)]

pub use arcstr;
pub use arcstr::ArcStr;
pub use mut_set::MutSet as GroupSet;
pub use ordered_float::NotNan;
/// `bus` group structure.
pub mod bus;
/// `cell` group structure.
pub mod cell;
pub use cell::Cell;
/// Common items/miscs.
pub mod common;
/// `Boolean Expression`, `SDF Expression`, and so on.
pub mod expression;
/// `internal_power` group structure.
pub mod internal_power;
/// `Library` group structure, top level of liberty format.
pub mod library;
pub use library::Library;
/// `pin` group structure.
pub mod pin;
pub use pin::Pin;
/// `timing` group structure.
pub mod timing;
pub use timing::Timing;
/// Partially re-exported [uom](https://crates.io/crates/uom) quantities and measurement units
/// used in the library public interface.
pub mod units;

pub mod ast;
pub use ast::Group;

/// CCSN relative attributes
pub mod ccsn;
mod types;
pub mod util;