diff --git a/crates/languages/src/python.rs b/crates/languages/src/python.rs index ede46b38e5ada332e10db4feb72ae11767e839bd..fd887d1be5922f358c21e30d658b81645b47eaa5 100644 --- a/crates/languages/src/python.rs +++ b/crates/languages/src/python.rs @@ -1761,6 +1761,26 @@ mod tests { "def a():\n \n if a:\n b()\n else:\n foo(\n )\n\n" ); + // reset to a for loop statement + let statement = "for i in range(10):\n print(i)\n"; + buffer.edit([(0..buffer.len(), statement)], None, cx); + + // insert single line comment after each line + let eol_ixs = statement + .char_indices() + .filter_map(|(ix, c)| if c == '\n' { Some(ix) } else { None }) + .collect::>(); + let editions = eol_ixs + .iter() + .enumerate() + .map(|(i, &eol_ix)| (eol_ix..eol_ix, format!(" # comment {}", i + 1))) + .collect::, String)>>(); + buffer.edit(editions, Some(AutoindentMode::EachLine), cx); + assert_eq!( + buffer.text(), + "for i in range(10): # comment 1\n print(i) # comment 2\n" + ); + // reset to a simple if statement buffer.edit([(0..buffer.len(), "if a:\n b(\n )")], None, cx); diff --git a/crates/languages/src/python/config.toml b/crates/languages/src/python/config.toml index 8728dfeaf138a97a7d9d7e9e2e3ca4b6b6db1820..3e8b9b550af33fd9594dd14eda12fb81e220d7b9 100644 --- a/crates/languages/src/python/config.toml +++ b/crates/languages/src/python/config.toml @@ -28,10 +28,10 @@ brackets = [ auto_indent_using_last_non_empty_line = false debuggers = ["Debugpy"] -increase_indent_pattern = "^[^#].*:\\s*$" +increase_indent_pattern = "^[^#].*:\\s*(#.*)?$" decrease_indent_patterns = [ - { pattern = "^\\s*elif\\b.*:", valid_after = ["if", "elif"] }, - { pattern = "^\\s*else\\b.*:", valid_after = ["if", "elif", "for", "while", "except"] }, - { pattern = "^\\s*except\\b.*:", valid_after = ["try", "except"] }, - { pattern = "^\\s*finally\\b.*:", valid_after = ["try", "except", "else"] }, + { pattern = "^\\s*elif\\b.*:\\s*(#.*)?", valid_after = ["if", "elif"] }, + { pattern = "^\\s*else\\b.*:\\s*(#.*)?", valid_after = ["if", "elif", "for", "while", "except"] }, + { pattern = "^\\s*except\\b.*:\\s*(#.*)?", valid_after = ["try", "except"] }, + { pattern = "^\\s*finally\\b.*:\\s*(#.*)?", valid_after = ["try", "except", "else"] }, ]