==================
UPDATE PROJECT
==================

UPDATE PROJECT
  REFACTOR LANGUAGE "rope"
  WITH PATTERN '''
<rope-line pattern expression>
'''
  WITH GOAL '''
<rope-like goal expression>
''';

---

(source_file
  (update_command
    (update_project_clause
      (refactor_language_field
        (string
          (single_quoted_string)))
      (pattern_field
        (string
          (multi_line_string)))
      (goal_field
        (string
          (multi_line_string)))))
  (command_separator))


==================
UPDATE Single File
==================

-- Remarks
UPDATE FILE "/path/to/file.js"
REPLACE LINE "old" WITH CONTENT "new line content";

UPDATE FILE "/app/main.py"
INSERT AFTER LINE "def main():" OFFSET 1
WITH CONTENT "@1:print('Hello, World!')"

UPDATE FILE "/app/main.py"
INSERT INSIDE FUNCTION "func1" OFFSET 1 BOTTOM
WITH CONTENT "@1:print('Hello, World!')";

UPDATE FILE "my_code.py"
REPLACE FUNCTION "my_function"
WITH CONTENT """
def other_function(x):
"""

UPDATE FILE "file" REPLACE WHOLE WITH CONTENT "Single line" -- Preferred
UPDATE FILE "file" REPLACE BODY WITH CONTENT "Single line"  --   Synonym

UPDATE FILE "/config/settings.json"
REPLACE SEGMENT
    STARTING AT LINE "\"database\": {" OFFSET 1
    ENDING BEFORE LINE "}"
WITH CONTENT '''
    "host": "localhost",
    "port": 5432,
    "user": "admin"
''';

UPDATE FILE "/config/settings.json"
REPLACE SEGMENT
    STARTING AT LINE "\"database\": {" OFFSET 1
    ENDING BEFORE LINE "}"
WITH FILE "my/file" SEGMENT
    STARTING AT LINE "\"database\": {" OFFSET 1
    ENDING BEFORE LINE "}"
    RELATIVE INDENTATION 2;

UPDATE FILE "file"
DELETE LINE "line"

UPDATE FILE "file"
DELETE VARIABLE "var1";

UPDATE FILE "file"
DELETE FUNCTION "fun";

UPDATE FILE "file"
DELETE CLASS "cls1";

UPDATE FILE "file"
DELETE SEGMENT
    STARTING AT LINE "\"database\": {" OFFSET 1
    ENDING BEFORE LINE "}"

UPDATE FILE "file" DELETE WHOLE -- Preferred
UPDATE FILE "file" DELETE BODY  --   Synonym

---

(source_file
  (comment)
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (replace_region_clause
      (region_field
        (marker_or_segment
          (marker
            (lineMarker
              (string
                (single_quoted_string)))))))
    (content_clause
      (string
        (single_quoted_string))))
  (command_separator)
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (insert_clause
      (relpos_bai
        (relpos_beforeafter
          (marker
            (lineMarker
              (string
                (single_quoted_string))
              (offset_clause
                (number)))))))
    (content_clause
      (string
        (single_quoted_string))))
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (insert_clause
      (relpos_bai
        (relpos_inside
          (identifierMarker
            (string
              (single_quoted_string))
            (offset_clause
              (number))))))
    (content_clause
      (string
        (single_quoted_string))))
  (command_separator)
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (replace_region_clause
      (region_field
        (marker_or_segment
          (marker
            (identifierMarker
              (string
                (single_quoted_string)))))))
    (content_clause
      (string
        (multi_line_string))))
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (replace_region_clause
      (region_field))
    (content_clause
      (string
        (single_quoted_string))))
  (comment)
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (replace_region_clause
      (region_field))
    (content_clause
      (string
        (single_quoted_string))))
  (comment)
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (replace_region_clause
      (region_field
        (marker_or_segment
          (segment
            (relpos_segment_start
              (relpos_at
                (lineMarker
                  (string
                    (single_quoted_string
                      (escape_sequence)
                      (escape_sequence)))
                  (offset_clause
                    (number)))))
            (relpos_segment_end
              (relpos_beforeafter
                (marker
                  (lineMarker
                    (string
                      (single_quoted_string))))))))))
    (content_clause
      (string
        (multi_line_string))))
  (command_separator)
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (replace_region_clause
      (region_field
        (marker_or_segment
          (segment
            (relpos_segment_start
              (relpos_at
                (lineMarker
                  (string
                    (single_quoted_string
                      (escape_sequence)
                      (escape_sequence)))
                  (offset_clause
                    (number)))))
            (relpos_segment_end
              (relpos_beforeafter
                (marker
                  (lineMarker
                    (string
                      (single_quoted_string))))))))))
    (content_from_segment
      (singlefile_clause
        (string
          (single_quoted_string)))
      (marker_or_segment
        (segment
          (relpos_segment_start
            (relpos_at
              (lineMarker
                (string
                  (single_quoted_string
                    (escape_sequence)
                    (escape_sequence)))
                (offset_clause
                  (number)))))
          (relpos_segment_end
            (relpos_beforeafter
              (marker
                (lineMarker
                  (string
                    (single_quoted_string))))))))
      (relative_indentation
        (number))))
  (command_separator)
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (update_delete_region_clause
      (region_field
        (marker_or_segment
          (marker
            (lineMarker
              (string
                (single_quoted_string))))))))
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (update_delete_region_clause
      (region_field
        (marker_or_segment
          (marker
            (identifierMarker
              (string
                (single_quoted_string))))))))
  (command_separator)
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (update_delete_region_clause
      (region_field
        (marker_or_segment
          (marker
            (identifierMarker
              (string
                (single_quoted_string))))))))
  (command_separator)
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (update_delete_region_clause
      (region_field
        (marker_or_segment
          (marker
            (identifierMarker
              (string
                (single_quoted_string))))))))
  (command_separator)
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (update_delete_region_clause
      (region_field
        (marker_or_segment
          (segment
            (relpos_segment_start
              (relpos_at
                (lineMarker
                  (string
                    (single_quoted_string
                      (escape_sequence)
                      (escape_sequence)))
                  (offset_clause
                    (number)))))
            (relpos_segment_end
              (relpos_beforeafter
                (marker
                  (lineMarker
                    (string
                      (single_quoted_string)))))))))))
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (update_delete_region_clause
      (region_field)))
  (comment)
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (update_delete_region_clause
      (region_field)))
  (comment))


==================
UPDATE Function/Class From File w/o WHERE
==================

UPDATE FUNCTION "calculateTotal"
FROM FILE "/src/utils.js"
REPLACE BODY
WITH CONTENT '''
  return items.reduce((sum, item) => sum + item.price, 0);
''';

UPDATE FUNCTION "calculateTotal"
FROM FILE "/src/utils.js"
REPLACE WHOLE
WITH CONTENT '''
...
''';

UPDATE CLASS "Validate*" OFFSET 2
  FROM FILE "/lib/helpers.py"
  INSERT
    BEFORE LINE "return" OFFSET 1
  WITH CONTENT "@1:something..."

UPDATE FUNCTION "validate*" OFFSET 2
  FROM FILE "/lib/helpers.py"
  DELETE WHOLE

UPDATE FUNCTION "validate*" OFFSET 2
  FROM FILE "/lib/helpers.py"
  DELETE BODY

UPDATE FUNCTION "validate*" OFFSET 2
  FROM FILE "/lib/helpers.py"
  DELETE LINE "line inside function"

UPDATE FUNCTION "validate*" OFFSET 2
  FROM FILE "/lib/helpers.py"
DELETE SEGMENT
    STARTING AT LINE "\"database\": {" OFFSET 1
    ENDING BEFORE LINE "}"

---

(source_file
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (replace_region_clause
      (region_field))
    (content_clause
      (string
        (multi_line_string))))
  (command_separator)
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (replace_region_clause
      (region_field))
    (content_clause
      (string
        (multi_line_string))))
  (command_separator)
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string))
        (offset_clause
          (number)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (insert_clause
      (relpos_bai
        (relpos_beforeafter
          (marker
            (lineMarker
              (string
                (single_quoted_string))
              (offset_clause
                (number)))))))
    (content_clause
      (string
        (single_quoted_string))))
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string))
        (offset_clause
          (number)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (update_delete_region_clause
      (region_field)))
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string))
        (offset_clause
          (number)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (update_delete_region_clause
      (region_field)))
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string))
        (offset_clause
          (number)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (update_delete_region_clause
      (region_field
        (marker_or_segment
          (marker
            (lineMarker
              (string
                (single_quoted_string))))))))
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string))
        (offset_clause
          (number)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (update_delete_region_clause
      (region_field
        (marker_or_segment
          (segment
            (relpos_segment_start
              (relpos_at
                (lineMarker
                  (string
                    (single_quoted_string
                      (escape_sequence)
                      (escape_sequence)))
                  (offset_clause
                    (number)))))
            (relpos_segment_end
              (relpos_beforeafter
                (marker
                  (lineMarker
                    (string
                      (single_quoted_string))))))))))))

==================
UPDATE Move Segment
==================

UPDATE FILE "/src/component.tsx"
MOVE SEGMENT
STARTING AT LINE "import React" OFFSET 0
ENDING BEFORE LINE "function Component"
INSERT AFTER LINE "export default Component;";

UPDATE FUNCTION "index"
FROM FILE "/app/views.py"
MOVE SEGMENT
STARTING AFTER LINE "def index():" OFFSET 1
ENDING BEFORE LINE "return"
INSERT BEFORE LINE "return" OFFSET 1;

---

(source_file
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (update_move_mos_clause
      (marker_or_segment
        (segment
          (relpos_segment_start
            (relpos_at
              (lineMarker
                (string
                  (single_quoted_string))
                (offset_clause
                  (number)))))
          (relpos_segment_end
            (relpos_beforeafter
              (marker
                (lineMarker
                  (string
                    (single_quoted_string))))))))
      (update_move_clause_destination
        (insert_clause
          (relpos_bai
            (relpos_beforeafter
              (marker
                (lineMarker
                  (string
                    (single_quoted_string))))))))))
  (command_separator)
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (update_move_region_clause
      (region_field
        (marker_or_segment
          (segment
            (relpos_segment_start
              (relpos_beforeafter
                (marker
                  (lineMarker
                    (string
                      (single_quoted_string))
                    (offset_clause
                      (number))))))
            (relpos_segment_end
              (relpos_beforeafter
                (marker
                  (lineMarker
                    (string
                      (single_quoted_string)))))))))
      (update_move_clause_destination
        (insert_clause
          (relpos_bai
            (relpos_beforeafter
              (marker
                (lineMarker
                  (string
                    (single_quoted_string))
                  (offset_clause
                    (number))))))))))
  (command_separator))

==================
UPDATE Move BODY / WHOLE / LINE
==================

UPDATE FUNCTION "index"
FROM FILE "/app/views.py"
MOVE WHOLE
INSERT BEFORE CLASS "TopClass" OFFSET 1
RELATIVE INDENTATION 2;

UPDATE FUNCTION "index"
FROM FILE "/app/views.py"
MOVE BODY
INSERT INSIDE FUNCTION "otherFunc" OFFSET 2 BOTTOM

UPDATE FUNCTION "index"
FROM FILE "/app/views.py"
MOVE LINE "a line"
INSERT AFTER LINE "XXX"

---

(source_file
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (update_move_region_clause
      (region_field)
      (update_move_clause_destination
        (insert_clause
          (relpos_bai
            (relpos_beforeafter
              (marker
                (identifierMarker
                  (string
                    (single_quoted_string))
                  (offset_clause
                    (number)))))))
        (relative_indentation
          (number)))))
  (command_separator)
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (update_move_region_clause
      (region_field)
      (update_move_clause_destination
        (insert_clause
          (relpos_bai
            (relpos_inside
              (identifierMarker
                (string
                  (single_quoted_string))
                (offset_clause
                  (number)))))))))
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (update_move_region_clause
      (region_field
        (marker_or_segment
          (marker
            (lineMarker
              (string
                (single_quoted_string))))))
      (update_move_clause_destination
        (insert_clause
          (relpos_bai
            (relpos_beforeafter
              (marker
                (lineMarker
                  (string
                    (single_quoted_string)))))))))))

==================
UPDATE Replace With Segment
==================

UPDATE FILE "/src/index.js"
REPLACE LINE "SS"
WITH FILE "/src/template.js"
SEGMENT
STARTING AT LINE "// START TEMPLATE"
ENDING BEFORE LINE "// END TEMPLATE"

UPDATE FUNCTION "calculate_average"
FROM FILE "/lib/math.py"
REPLACE BODY
WITH SEGMENT
STARTING AFTER LINE "def efficient_average(numbers):"
ENDING AT LINE "return";

---

(source_file
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (replace_region_clause
      (region_field
        (marker_or_segment
          (marker
            (lineMarker
              (string
                (single_quoted_string)))))))
    (content_from_segment
      (singlefile_clause
        (string
          (single_quoted_string)))
      (marker_or_segment
        (segment
          (relpos_segment_start
            (relpos_at
              (lineMarker
                (string
                  (single_quoted_string)))))
          (relpos_segment_end
            (relpos_beforeafter
              (marker
                (lineMarker
                  (string
                    (single_quoted_string))))))))))
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (replace_region_clause
      (region_field))
    (content_from_segment
      (marker_or_segment
        (segment
          (relpos_segment_start
            (relpos_beforeafter
              (marker
                (lineMarker
                  (string
                    (single_quoted_string))))))
          (relpos_segment_end
            (relpos_at
              (lineMarker
                (string
                  (single_quoted_string)))))))))
  (command_separator))


==================
UPDATE Edge Cases and Combinations
==================

UPDATE FILE "/very/long/path/to/file/with/many/directories/example.txt"
REPLACE SEGMENT
STARTING BEFORE LINE "Section 1" OFFSET 5
ENDING AFTER LINE "End of Section 1" OFFSET 10
WITH CONTENT '''
@0:This is a very long
@1:multiline content
@-1:with "quotes" and other 'special' chars
@2:like backslashes and   multiple   spaces
''';

UPDATE FUNCTION "*Controller" FROM FILE "/src/complex_file.js"
MOVE SEGMENT
STARTING AT LINE "constructor(" OFFSET 0
ENDING BEFORE LINE "}"
INSERT AFTER LINE "methods: {" OFFSET 1;

UPDATE FILE "/config.json"
REPLACE SEGMENT
STARTING AT LINE "\"environment\": {"
ENDING AFTER LINE "}"
WITH FILE "/default_config.json"
SEGMENT
  STARTING AT LINE "\"environment\": {"
  ENDING AFTER LINE"}";

---

(source_file
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (replace_region_clause
      (region_field
        (marker_or_segment
          (segment
            (relpos_segment_start
              (relpos_beforeafter
                (marker
                  (lineMarker
                    (string
                      (single_quoted_string))
                    (offset_clause
                      (number))))))
            (relpos_segment_end
              (relpos_beforeafter
                (marker
                  (lineMarker
                    (string
                      (single_quoted_string))
                    (offset_clause
                      (number))))))))))
    (content_clause
      (string
        (multi_line_string))))
  (command_separator)
  (update_command
    (identifier_from_file
      (identifierMarker
        (string
          (single_quoted_string)))
      (singlefile_clause
        (string
          (single_quoted_string))))
    (update_move_region_clause
      (region_field
        (marker_or_segment
          (segment
            (relpos_segment_start
              (relpos_at
                (lineMarker
                  (string
                    (single_quoted_string))
                  (offset_clause
                    (number)))))
            (relpos_segment_end
              (relpos_beforeafter
                (marker
                  (lineMarker
                    (string
                      (single_quoted_string)))))))))
      (update_move_clause_destination
        (insert_clause
          (relpos_bai
            (relpos_beforeafter
              (marker
                (lineMarker
                  (string
                    (single_quoted_string))
                  (offset_clause
                    (number))))))))))
  (command_separator)
  (update_command
    (singlefile_clause
      (string
        (single_quoted_string)))
    (replace_region_clause
      (region_field
        (marker_or_segment
          (segment
            (relpos_segment_start
              (relpos_at
                (lineMarker
                  (string
                    (single_quoted_string
                      (escape_sequence)
                      (escape_sequence))))))
            (relpos_segment_end
              (relpos_beforeafter
                (marker
                  (lineMarker
                    (string
                      (single_quoted_string))))))))))
    (content_from_segment
      (singlefile_clause
        (string
          (single_quoted_string)))
      (marker_or_segment
        (segment
          (relpos_segment_start
            (relpos_at
              (lineMarker
                (string
                  (single_quoted_string
                    (escape_sequence)
                    (escape_sequence))))))
          (relpos_segment_end
            (relpos_beforeafter
              (marker
                (lineMarker
                  (string
                    (single_quoted_string))))))))))
  (command_separator))
