def run(self, edit): regions = self.view.sel() if len(regions) == 1 and regions[0].empty(): # Selection is empty, use the entire buffer. regions = [sublime.Region(0, self.view.size())] for region in regions: input_lines = [ self.view.substr(r) for r in self.view.lines(region) ] sorted_lines = sort_lines(input_lines) # Fetch the actual line ending characters used, assuming the same is # used througout the entire region. first_line = self.view.substr(self.view.full_line(0)) stripped_line = first_line.rstrip() line_ending_length = len(first_line) - len(stripped_line) line_ending = first_line[len(first_line) - line_ending_length:] output = line_ending.join(sorted_lines) # If the end of the region had a line ending character, we re-add it here if self.view.substr(region).endswith(line_ending): output += line_ending self.view.replace(edit, region, output)
def test_sort_with_multiple_int_groups(self): input_lines = [ '1 1', '3 2', '2 3', ] expected_output_lines = [ '1 1', '2 3', '3 2', ] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def test_simple_sort_with_alpha(self): input_lines = [ '1 a', '3 b', '2 c', ] expected_output_lines = [ '1 a', '2 c', '3 b', ] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def test_simple_sort(self): input_lines = [ '1', '3', '2', ] expected_output_lines = [ '1', '2', '3', ] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def test_sort_with_alphanumeric_partial_formatting(self): input_lines = [ '2 a', '1 b2', '1 b.', ] expected_output_lines = [ '1 b2', '1 b.', '2 a', ] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def test_sort_with_decimals(self): input_lines = [ '1.5', '1', '2.5', '2', ] expected_output_lines = [ '1', '1.5', '2', '2.5', ] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def test_sort_with_negatives(self): input_lines = [ '1', '-2', '2', '-1', '3', ] expected_output_lines = [ '-2', '-1', '1', '2', '3', ] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def test_sort_with_negatives_and_alpha(self): input_lines = [ '1 a', '-2 b', '2 c', '-1 d', '3 e', ] expected_output_lines = [ '-2 b', '-1 d', '1 a', '2 c', '3 e', ] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def run(self, edit): regions = self.view.sel() if len(regions) == 1 and regions[0].empty(): # Selection is empty, use the entire buffer. regions = [sublime.Region(0, self.view.size())] for region in regions: input_lines = [self.view.substr(r) for r in self.view.lines(region)] sorted_lines = sort_lines(input_lines) output = LINE_ENDING_CHARACTER.join(sorted_lines) # If the end of the region had a line ending character, we re-add it here if self.view.substr(region).endswith(LINE_ENDING_CHARACTER): output += LINE_ENDING_CHARACTER self.view.replace(edit, region, output)
def test_sort_with_negatives_and_alpha(self): input_lines = ["1 a", "-2 b", "2 c", "-1 d", "3 e"] expected_output_lines = ["-2 b", "-1 d", "1 a", "2 c", "3 e"] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def test_sort_with_negative_decimals(self): input_lines = ["2", "1.2", "1", "0", "-1", "-1.2", "-2"] expected_output_lines = ["-2", "-1.2", "-1", "0", "1", "1.2", "2"] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def test_sort_with_negatives(self): input_lines = ["1", "-2", "2", "-1", "3"] expected_output_lines = ["-2", "-1", "1", "2", "3"] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def test_sort_with_multiple_int_groups(self): input_lines = ["1 1", "3 2", "2 3"] expected_output_lines = ["1 1", "2 3", "3 2"] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def test_sort_with_decimals(self): input_lines = ["1.5", "1", "2.5", "2"] expected_output_lines = ["1", "1.5", "2", "2.5"] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def test_simple_sort_with_alpha(self): input_lines = ["1 a", "3 b", "2 c"] expected_output_lines = ["1 a", "2 c", "3 b"] self.assertEqual(sort_lines(input_lines), expected_output_lines)
def test_simple_sort(self): input_lines = ["1", "3", "2"] expected_output_lines = ["1", "2", "3"] self.assertEqual(sort_lines(input_lines), expected_output_lines)