diff --git a/.github/workflows/build_android_apk.yaml b/.github/workflows/build_android_apk.yaml index dc42889f44..f4f4e1bf9f 100644 --- a/.github/workflows/build_android_apk.yaml +++ b/.github/workflows/build_android_apk.yaml @@ -4,7 +4,7 @@ on: workflow_dispatch env: FLUTTER_VERSION: "3.18.0-0.2.pre" - RUST_TOOLCHAIN: "1.70" + RUST_TOOLCHAIN: "1.75" jobs: build: diff --git a/.github/workflows/mobile_ci.yaml b/.github/workflows/mobile_ci.yaml index 7ab8a139ba..b6892f9c83 100644 --- a/.github/workflows/mobile_ci.yaml +++ b/.github/workflows/mobile_ci.yaml @@ -19,7 +19,7 @@ on: env: FLUTTER_VERSION: "3.18.0-0.2.pre" - RUST_TOOLCHAIN: "1.70" + RUST_TOOLCHAIN: "1.75" concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 72ad5265fe..1faf2d89d0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,7 @@ on: env: FLUTTER_VERSION: "3.18.0-0.2.pre" - RUST_TOOLCHAIN: "1.70" + RUST_TOOLCHAIN: "1.75" jobs: create-release: diff --git a/.github/workflows/rust_ci.yaml b/.github/workflows/rust_ci.yaml index 137ab97e12..a7e5fd6870 100644 --- a/.github/workflows/rust_ci.yaml +++ b/.github/workflows/rust_ci.yaml @@ -21,7 +21,7 @@ on: env: CARGO_TERM_COLOR: always - RUST_TOOLCHAIN: "1.70" + RUST_TOOLCHAIN: "1.75" jobs: test-on-ubuntu: @@ -101,5 +101,5 @@ jobs: working-directory: frontend/rust-lib/ - name: clippy rust-lib - run: cargo clippy --all + run: cargo clippy --all-targets -- -D warnings working-directory: frontend/rust-lib \ No newline at end of file diff --git a/.github/workflows/rust_coverage.yml b/.github/workflows/rust_coverage.yml index 52f76bf42e..dcf883ee3c 100644 --- a/.github/workflows/rust_coverage.yml +++ b/.github/workflows/rust_coverage.yml @@ -12,7 +12,7 @@ on: env: CARGO_TERM_COLOR: always FLUTTER_VERSION: "3.18.0-0.2.pre" - RUST_TOOLCHAIN: "1.70" + RUST_TOOLCHAIN: "1.75" jobs: tests: diff --git a/.github/workflows/tauri_ci.yaml b/.github/workflows/tauri_ci.yaml index aff1847815..66024c75f2 100644 --- a/.github/workflows/tauri_ci.yaml +++ b/.github/workflows/tauri_ci.yaml @@ -9,7 +9,7 @@ on: env: NODE_VERSION: "18.16.0" PNPM_VERSION: "8.5.0" - RUST_TOOLCHAIN: "1.70" + RUST_TOOLCHAIN: "1.75" concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} diff --git a/frontend/appflowy_tauri/src-tauri/rust-toolchain.toml b/frontend/appflowy_tauri/src-tauri/rust-toolchain.toml index f400973ca7..6d833ff506 100644 --- a/frontend/appflowy_tauri/src-tauri/rust-toolchain.toml +++ b/frontend/appflowy_tauri/src-tauri/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.70" +channel = "1.75" diff --git a/frontend/rust-lib/event-integration/src/document/utils.rs b/frontend/rust-lib/event-integration/src/document/utils.rs index 8b160344de..b5ba9c8fe3 100644 --- a/frontend/rust-lib/event-integration/src/document/utils.rs +++ b/frontend/rust-lib/event-integration/src/document/utils.rs @@ -32,7 +32,7 @@ pub fn parse_document_data(document: OpenDocumentData) -> ParseDocumentData { let page_block = blocks.get(&page_id).unwrap(); let children_id = page_block.children_id.clone(); let children = children_map.get(&children_id).unwrap(); - let block_id = children.children.get(0).unwrap().to_string(); + let block_id = children.children.first().unwrap().to_string(); ParseDocumentData { doc_id, page_id, diff --git a/frontend/rust-lib/event-integration/tests/user/local_test/helper.rs b/frontend/rust-lib/event-integration/tests/user/local_test/helper.rs index 184abd3bd5..c44cf0f8c4 100644 --- a/frontend/rust-lib/event-integration/tests/user/local_test/helper.rs +++ b/frontend/rust-lib/event-integration/tests/user/local_test/helper.rs @@ -1,6 +1,6 @@ pub(crate) fn invalid_email_test_case() -> Vec { // https://gist.github.com/cjaoude/fd9910626629b53c4d25 - vec![ + [ "annie@", "annie@gmail@", "#@%^%#$@#$@#.com", @@ -11,14 +11,6 @@ pub(crate) fn invalid_email_test_case() -> Vec { "email@-example.com", "email@example..com", "あいうえお@example.com", - /* The following email is valid according to the validate_email function return - * ".email@example.com", - * "email.@example.com", - * "email..email@example.com", - * "email@example", - * "email@example.web", - * "email@111.222.333.44444", - * "Abc..123@example.com", */ ] .iter() .map(|s| s.to_string()) @@ -26,7 +18,7 @@ pub(crate) fn invalid_email_test_case() -> Vec { } pub(crate) fn invalid_password_test_case() -> Vec { - vec!["123456", "1234".repeat(100).as_str()] + ["123456", "1234".repeat(100).as_str()] .iter() .map(|s| s.to_string()) .collect::>() diff --git a/frontend/rust-lib/flowy-core/src/lib.rs b/frontend/rust-lib/flowy-core/src/lib.rs index 889be21db1..1c6497f834 100644 --- a/frontend/rust-lib/flowy-core/src/lib.rs +++ b/frontend/rust-lib/flowy-core/src/lib.rs @@ -21,7 +21,6 @@ use flowy_user_deps::cloud::UserCloudServiceProvider; use lib_dispatch::prelude::*; use lib_dispatch::runtime::AFPluginRuntime; use module::make_plugins; -pub use module::*; use crate::config::AppFlowyCoreConfig; use crate::deps_resolve::collab_backup::RocksdbBackupImpl; diff --git a/frontend/rust-lib/flowy-database2/src/services/database/database_editor.rs b/frontend/rust-lib/flowy-database2/src/services/database/database_editor.rs index edefb9206b..e4797b4a37 100644 --- a/frontend/rust-lib/flowy-database2/src/services/database/database_editor.rs +++ b/frontend/rust-lib/flowy-database2/src/services/database/database_editor.rs @@ -1304,12 +1304,7 @@ impl DatabaseViewOperation for DatabaseViewOperationImpl { if let (Some(database), Some(editor_by_view_id)) = (weak_database.upgrade(), weak_editor_by_view_id.upgrade()) { - let view_editors = editor_by_view_id - .read() - .await - .values() - .map(|editor| editor.clone()) - .collect(); + let view_editors = editor_by_view_id.read().await.values().cloned().collect(); let _ = update_field_type_option_fn(&database, &view_editors, type_option_data, old_field).await; } diff --git a/frontend/rust-lib/flowy-database2/src/services/field/type_options/selection_type_option/mod.rs b/frontend/rust-lib/flowy-database2/src/services/field/type_options/selection_type_option/mod.rs index b9a7a6c8d2..97e52b4576 100644 --- a/frontend/rust-lib/flowy-database2/src/services/field/type_options/selection_type_option/mod.rs +++ b/frontend/rust-lib/flowy-database2/src/services/field/type_options/selection_type_option/mod.rs @@ -7,7 +7,6 @@ mod select_type_option; mod single_select_type_option; mod type_option_transform; -pub use checklist_filter::*; pub use multi_select_type_option::*; pub use select_ids::*; pub use select_option::*; diff --git a/frontend/rust-lib/flowy-database2/src/services/field/type_options/type_option.rs b/frontend/rust-lib/flowy-database2/src/services/field/type_options/type_option.rs index 952b483e2d..e54db1d58a 100644 --- a/frontend/rust-lib/flowy-database2/src/services/field/type_options/type_option.rs +++ b/frontend/rust-lib/flowy-database2/src/services/field/type_options/type_option.rs @@ -280,6 +280,6 @@ pub fn default_type_option_data_from_type(field_type: &FieldType) -> TypeOptionD FieldType::MultiSelect => MultiSelectTypeOption::default().into(), FieldType::Checkbox => CheckboxTypeOption::default().into(), FieldType::URL => URLTypeOption::default().into(), - FieldType::Checklist => ChecklistTypeOption::default().into(), + FieldType::Checklist => ChecklistTypeOption.into(), } } diff --git a/frontend/rust-lib/flowy-database2/src/services/filter/controller.rs b/frontend/rust-lib/flowy-database2/src/services/filter/controller.rs index ab6a56c45a..8cbffd62f5 100644 --- a/frontend/rust-lib/flowy-database2/src/services/filter/controller.rs +++ b/frontend/rust-lib/flowy-database2/src/services/filter/controller.rs @@ -369,9 +369,7 @@ fn filter_row( cell_filter_cache: &CellFilterCache, ) -> Option<(RowId, bool)> { // Create a filter result cache if it's not exist - let mut filter_result = result_by_row_id - .entry(row.id.clone()) - .or_insert_with(FilterResult::default); + let mut filter_result = result_by_row_id.entry(row.id.clone()).or_default(); let old_is_visible = filter_result.is_visible(); // Iterate each cell of the row to check its visibility diff --git a/frontend/rust-lib/flowy-database2/src/services/group/controller.rs b/frontend/rust-lib/flowy-database2/src/services/group/controller.rs index 11bcce8364..c3520b2218 100644 --- a/frontend/rust-lib/flowy-database2/src/services/group/controller.rs +++ b/frontend/rust-lib/flowy-database2/src/services/group/controller.rs @@ -115,14 +115,14 @@ where let no_status_group_rows = other_group_changesets .iter() .flat_map(|changeset| &changeset.deleted_rows) - .cloned() - .filter(|row_id| { + .filter(|&row_id| { // if the [other_group_inserted_row] contains the row_id of the row // which means the row should not move to the default group. !other_group_inserted_row .iter() .any(|inserted_row| &inserted_row.row_meta.id == row_id) }) + .cloned() .collect::>(); let mut changeset = GroupRowsNotificationPB::new(no_status_group.id.clone()); diff --git a/frontend/rust-lib/flowy-database2/src/services/group/controller_impls/date_controller.rs b/frontend/rust-lib/flowy-database2/src/services/group/controller_impls/date_controller.rs index 66d6b4b31c..c7368e71e1 100644 --- a/frontend/rust-lib/flowy-database2/src/services/group/controller_impls/date_controller.rs +++ b/frontend/rust-lib/flowy-database2/src/services/group/controller_impls/date_controller.rs @@ -223,10 +223,8 @@ impl GroupCustomize for DateGroupController { deleted_group = Some(GroupPB::from(group.clone())); } } - if deleted_group.is_some() { - let _ = self - .context - .delete_group(&deleted_group.as_ref().unwrap().group_id); + if let Some(delete_group) = deleted_group.as_ref() { + let _ = self.context.delete_group(&delete_group.group_id); } deleted_group } diff --git a/frontend/rust-lib/flowy-database2/src/services/group/controller_impls/url_controller.rs b/frontend/rust-lib/flowy-database2/src/services/group/controller_impls/url_controller.rs index c141811a59..a687acce5d 100644 --- a/frontend/rust-lib/flowy-database2/src/services/group/controller_impls/url_controller.rs +++ b/frontend/rust-lib/flowy-database2/src/services/group/controller_impls/url_controller.rs @@ -179,10 +179,8 @@ impl GroupCustomize for URLGroupController { deleted_group = Some(GroupPB::from(group.clone())); } } - if deleted_group.is_some() { - let _ = self - .context - .delete_group(&deleted_group.as_ref().unwrap().group_id); + if let Some(deleted_group) = deleted_group.as_ref() { + let _ = self.context.delete_group(&deleted_group.group_id); } deleted_group } diff --git a/frontend/rust-lib/flowy-database2/src/services/sort/entities.rs b/frontend/rust-lib/flowy-database2/src/services/sort/entities.rs index ef45126e53..ff64bbf11b 100644 --- a/frontend/rust-lib/flowy-database2/src/services/sort/entities.rs +++ b/frontend/rust-lib/flowy-database2/src/services/sort/entities.rs @@ -30,9 +30,10 @@ impl TryFrom for Sort { value.get_i64_value(FIELD_TYPE).map(FieldType::from), ) { (Some(id), Some(field_id), Some(field_type)) => { - let condition = - SortCondition::try_from(value.get_i64_value(SORT_CONDITION).unwrap_or_default()) - .unwrap_or_default(); + let condition = value + .get_i64_value(SORT_CONDITION) + .map(SortCondition::from) + .unwrap_or_default(); Ok(Self { id, field_id, diff --git a/frontend/rust-lib/flowy-database2/tests/database/cell_test/test.rs b/frontend/rust-lib/flowy-database2/tests/database/cell_test/test.rs index ea1bd80328..f3bb9cf09c 100644 --- a/frontend/rust-lib/flowy-database2/tests/database/cell_test/test.rs +++ b/frontend/rust-lib/flowy-database2/tests/database/cell_test/test.rs @@ -19,7 +19,7 @@ async fn grid_cell_update() { let rows = &test.row_details; let mut scripts = vec![]; - for (_, row_detail) in rows.iter().enumerate() { + for row_detail in rows.iter() { for field in &fields { let field_type = FieldType::from(field.field_type); if field_type == FieldType::LastEditedTime || field_type == FieldType::CreatedTime { diff --git a/frontend/rust-lib/flowy-database2/tests/database/field_test/test.rs b/frontend/rust-lib/flowy-database2/tests/database/field_test/test.rs index 6b95c1db3d..03b42a69b7 100644 --- a/frontend/rust-lib/flowy-database2/tests/database/field_test/test.rs +++ b/frontend/rust-lib/flowy-database2/tests/database/field_test/test.rs @@ -195,7 +195,7 @@ async fn grid_switch_from_multi_select_to_text_test() { from_field_type: FieldType::MultiSelect, expected_content: format!( "{},{}", - multi_select_type_option.get(0).unwrap().name, + multi_select_type_option.first().unwrap().name, multi_select_type_option.get(1).unwrap().name ), }]; diff --git a/frontend/rust-lib/flowy-database2/tests/database/group_test/date_group_test.rs b/frontend/rust-lib/flowy-database2/tests/database/group_test/date_group_test.rs index 4809d42b4f..5ee7161868 100644 --- a/frontend/rust-lib/flowy-database2/tests/database/group_test/date_group_test.rs +++ b/frontend/rust-lib/flowy-database2/tests/database/group_test/date_group_test.rs @@ -196,7 +196,7 @@ async fn change_date_on_moving_row_to_another_group() { let group = test.group_at_index(2).await; let rows = group.clone().rows; - let row_id = &rows.get(0).unwrap().id; + let row_id = &rows.first().unwrap().id; let row_detail = test .get_rows() .await diff --git a/frontend/rust-lib/flowy-database2/tests/database/group_test/test.rs b/frontend/rust-lib/flowy-database2/tests/database/group_test/test.rs index cfdd8a1c8c..61e4d0e6aa 100644 --- a/frontend/rust-lib/flowy-database2/tests/database/group_test/test.rs +++ b/frontend/rust-lib/flowy-database2/tests/database/group_test/test.rs @@ -47,7 +47,7 @@ async fn group_move_row_test() { AssertRow { group_index: 1, row_index: 1, - row: group.rows.get(0).unwrap().clone(), + row: group.rows.first().unwrap().clone(), }, ]; test.run_scripts(scripts).await; @@ -75,7 +75,7 @@ async fn group_move_row_to_other_group_test() { AssertRow { group_index: 2, row_index: 1, - row: group.rows.get(0).unwrap().clone(), + row: group.rows.first().unwrap().clone(), }, ]; test.run_scripts(scripts).await; @@ -104,7 +104,7 @@ async fn group_move_two_row_to_other_group_test() { AssertRow { group_index: 2, row_index: 1, - row: group_1.rows.get(0).unwrap().clone(), + row: group_1.rows.first().unwrap().clone(), }, ]; test.run_scripts(scripts).await; @@ -129,7 +129,7 @@ async fn group_move_two_row_to_other_group_test() { AssertRow { group_index: 2, row_index: 1, - row: group_1.rows.get(0).unwrap().clone(), + row: group_1.rows.first().unwrap().clone(), }, ]; test.run_scripts(scripts).await; @@ -150,7 +150,7 @@ async fn group_move_row_to_other_group_and_reorder_from_up_to_down_test() { AssertRow { group_index: 2, row_index: 1, - row: group_1.rows.get(0).unwrap().clone(), + row: group_1.rows.first().unwrap().clone(), }, ]; test.run_scripts(scripts).await; @@ -165,7 +165,7 @@ async fn group_move_row_to_other_group_and_reorder_from_up_to_down_test() { AssertRow { group_index: 2, row_index: 2, - row: group_2.rows.get(0).unwrap().clone(), + row: group_2.rows.first().unwrap().clone(), }, ]; test.run_scripts(scripts).await; diff --git a/frontend/rust-lib/flowy-database2/tests/database/mock_data/board_mock_data.rs b/frontend/rust-lib/flowy-database2/tests/database/mock_data/board_mock_data.rs index 9183f3a5d0..f08335c8a3 100644 --- a/frontend/rust-lib/flowy-database2/tests/database/mock_data/board_mock_data.rs +++ b/frontend/rust-lib/flowy-database2/tests/database/mock_data/board_mock_data.rs @@ -118,7 +118,7 @@ pub fn make_test_board() -> DatabaseData { // let option1 = SelectOption::with_color(FIRST_THING, SelectOptionColor::Purple); // let option2 = SelectOption::with_color(SECOND_THING, SelectOptionColor::Orange); // let option3 = SelectOption::with_color(THIRD_THING, SelectOptionColor::Yellow); - let type_option = ChecklistTypeOption::default(); + let type_option = ChecklistTypeOption; // type_option.options.extend(vec![option1, option2, option3]); let checklist_field = FieldBuilder::new(field_type, type_option) .name("TODO") diff --git a/frontend/rust-lib/flowy-database2/tests/database/mock_data/grid_mock_data.rs b/frontend/rust-lib/flowy-database2/tests/database/mock_data/grid_mock_data.rs index 9ccedd60ea..f8e9c2fd11 100644 --- a/frontend/rust-lib/flowy-database2/tests/database/mock_data/grid_mock_data.rs +++ b/frontend/rust-lib/flowy-database2/tests/database/mock_data/grid_mock_data.rs @@ -120,7 +120,7 @@ pub fn make_test_grid() -> DatabaseData { // let option1 = SelectOption::with_color(FIRST_THING, SelectOptionColor::Purple); // let option2 = SelectOption::with_color(SECOND_THING, SelectOptionColor::Orange); // let option3 = SelectOption::with_color(THIRD_THING, SelectOptionColor::Yellow); - let type_option = ChecklistTypeOption::default(); + let type_option = ChecklistTypeOption; // type_option.options.extend(vec![option1, option2, option3]); let checklist_field = FieldBuilder::new(field_type, type_option) .name("TODO") diff --git a/frontend/rust-lib/flowy-document2/src/document.rs b/frontend/rust-lib/flowy-document2/src/document.rs index 2f56b28bde..928ebebea5 100644 --- a/frontend/rust-lib/flowy-document2/src/document.rs +++ b/frontend/rust-lib/flowy-document2/src/document.rs @@ -26,6 +26,7 @@ impl MutexDocument { /// # Returns /// * `Result` - a Result containing either a new Document object or an Error if the document creation failed pub fn open(doc_id: &str, collab: Arc) -> FlowyResult { + #[allow(clippy::arc_with_non_send_sync)] let document = Document::open(collab.clone()).map(|inner| Self(Arc::new(Mutex::new(inner))))?; subscribe_document_changed(doc_id, &document); subscribe_document_snapshot_state(&collab); @@ -41,6 +42,7 @@ impl MutexDocument { /// # Returns /// * `Result` - a Result containing either a new Document object or an Error if the document creation failed pub fn create_with_data(collab: Arc, data: DocumentData) -> FlowyResult { + #[allow(clippy::arc_with_non_send_sync)] let document = Document::create_with_data(collab, data).map(|inner| Self(Arc::new(Mutex::new(inner))))?; Ok(document) diff --git a/frontend/rust-lib/flowy-document2/tests/document/event_handler_test.rs b/frontend/rust-lib/flowy-document2/tests/document/event_handler_test.rs index aa737c8889..770d7c6d93 100644 --- a/frontend/rust-lib/flowy-document2/tests/document/event_handler_test.rs +++ b/frontend/rust-lib/flowy-document2/tests/document/event_handler_test.rs @@ -26,7 +26,7 @@ fn convert_json_to_document() { let page_block = blocks.get(&page_id).unwrap(); let page_children = children_map.get(&page_block.children_id).unwrap(); assert_eq!(page_children.children.len(), 1); - let paragraph1 = blocks.get(page_children.children.get(0).unwrap()).unwrap(); + let paragraph1 = blocks.get(page_children.children.first().unwrap()).unwrap(); assert_eq!(paragraph1.ty, "paragraph1"); assert_eq!(paragraph1.parent_id, page_block.id); } diff --git a/frontend/rust-lib/flowy-document2/tests/parser/document_data_parser_test.rs b/frontend/rust-lib/flowy-document2/tests/parser/document_data_parser_test.rs index 67a1896031..084cbfe4cd 100644 --- a/frontend/rust-lib/flowy-document2/tests/parser/document_data_parser_test.rs +++ b/frontend/rust-lib/flowy-document2/tests/parser/document_data_parser_test.rs @@ -71,7 +71,7 @@ async fn document_data_to_json_with_range_2_test() { let start_block_id = children_map .get(start_block_parent.children.as_str()) .unwrap() - .get(0) + .first() .unwrap(); let start = Selection { @@ -89,7 +89,7 @@ async fn document_data_to_json_with_range_2_test() { let end_block_children = children_map .get(end_block_parent.children.as_str()) .unwrap(); - let end_block_id = end_block_children.get(0).unwrap(); + let end_block_id = end_block_children.first().unwrap(); let end = Selection { block_id: end_block_id.to_string(), index: 0, diff --git a/frontend/rust-lib/flowy-folder2/src/entities/parser/trash/mod.rs b/frontend/rust-lib/flowy-folder2/src/entities/parser/trash/mod.rs index ddb6a3b91e..3b23a7a359 100644 --- a/frontend/rust-lib/flowy-folder2/src/entities/parser/trash/mod.rs +++ b/frontend/rust-lib/flowy-folder2/src/entities/parser/trash/mod.rs @@ -1,3 +1 @@ mod trash_id; - -pub use trash_id::*; diff --git a/frontend/rust-lib/flowy-server/src/supabase/api/user.rs b/frontend/rust-lib/flowy-server/src/supabase/api/user.rs index 05bec1092b..4255b0f5ca 100644 --- a/frontend/rust-lib/flowy-server/src/supabase/api/user.rs +++ b/frontend/rust-lib/flowy-server/src/supabase/api/user.rs @@ -271,8 +271,6 @@ where } fn reset_workspace(&self, collab_object: CollabObject) -> FutureResult<(), Error> { - let collab_object = collab_object; - let try_get_postgrest = self.server.try_get_weak_postgrest(); let (tx, rx) = channel(); let init_update = default_workspace_doc_state(&collab_object); diff --git a/frontend/rust-lib/flowy-sqlite/src/sqlite_impl/mod.rs b/frontend/rust-lib/flowy-sqlite/src/sqlite_impl/mod.rs index f6d5cbfd8d..d0ffb722b7 100644 --- a/frontend/rust-lib/flowy-sqlite/src/sqlite_impl/mod.rs +++ b/frontend/rust-lib/flowy-sqlite/src/sqlite_impl/mod.rs @@ -8,4 +8,4 @@ mod pragma; pub use database::*; pub use pool::*; -pub use errors::{Error, ErrorKind, Result}; +pub use errors::Error; diff --git a/frontend/rust-lib/rust-toolchain.toml b/frontend/rust-lib/rust-toolchain.toml index f400973ca7..6d833ff506 100644 --- a/frontend/rust-lib/rust-toolchain.toml +++ b/frontend/rust-lib/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.70" +channel = "1.75"