aconfig: allow dots in package fields
Allow package fields to include dots. Update the generated code based on the package name: if the package name is com.android.example: - java: package com.android.example; ... - C++: namespace com::android::example { ... } - Rust: mod com { mod android { mod example { ... } } } Also, update examples to use dots in the package fields. Also, remove unnecessary #include from the auto-generated C++ code: the header should not include itself. Bug: 285000854 Test: atest aconfig.test Change-Id: I8a5352e25c64c34dee0725202a1b7c9957819de8
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
pub fn is_valid_identifier(s: &str) -> bool {
|
||||
pub fn is_valid_name_ident(s: &str) -> bool {
|
||||
// Identifiers must match [a-z][a-z0-9_]*
|
||||
let mut chars = s.chars();
|
||||
let Some(first) = chars.next() else {
|
||||
@@ -26,18 +26,40 @@ pub fn is_valid_identifier(s: &str) -> bool {
|
||||
chars.all(|ch| ch.is_ascii_lowercase() || ch.is_ascii_digit() || ch == '_')
|
||||
}
|
||||
|
||||
pub fn is_valid_package_ident(s: &str) -> bool {
|
||||
s.split('.').all(is_valid_name_ident)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_is_valid_identifier() {
|
||||
assert!(is_valid_identifier("foo"));
|
||||
assert!(is_valid_identifier("foo_bar_123"));
|
||||
fn test_is_valid_name_ident() {
|
||||
assert!(is_valid_name_ident("foo"));
|
||||
assert!(is_valid_name_ident("foo_bar_123"));
|
||||
|
||||
assert!(!is_valid_identifier(""));
|
||||
assert!(!is_valid_identifier("123_foo"));
|
||||
assert!(!is_valid_identifier("foo-bar"));
|
||||
assert!(!is_valid_identifier("foo-b\u{00e5}r"));
|
||||
assert!(!is_valid_name_ident(""));
|
||||
assert!(!is_valid_name_ident("123_foo"));
|
||||
assert!(!is_valid_name_ident("foo-bar"));
|
||||
assert!(!is_valid_name_ident("foo-b\u{00e5}r"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_is_valid_package_ident() {
|
||||
assert!(is_valid_package_ident("foo"));
|
||||
assert!(is_valid_package_ident("foo_bar_123"));
|
||||
assert!(is_valid_package_ident("foo.bar"));
|
||||
assert!(is_valid_package_ident("foo.bar.a123"));
|
||||
|
||||
assert!(!is_valid_package_ident(""));
|
||||
assert!(!is_valid_package_ident("123_foo"));
|
||||
assert!(!is_valid_package_ident("foo-bar"));
|
||||
assert!(!is_valid_package_ident("foo-b\u{00e5}r"));
|
||||
assert!(!is_valid_package_ident("foo.bar.123"));
|
||||
assert!(!is_valid_package_ident(".foo.bar"));
|
||||
assert!(!is_valid_package_ident("foo.bar."));
|
||||
assert!(!is_valid_package_ident("."));
|
||||
assert!(!is_valid_package_ident("foo..bar"));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user