google / pasta

Library to refactor python code through AST manipulation.
Apache License 2.0
341 stars 40 forks source link

Support formatting-preserving insertion into collections #80

Open soupytwist opened 4 years ago

soupytwist commented 4 years ago

Original report:

########## Example 1: insert the "'b':'b_s'" into dict D by alphabet order
D = {
    'a': 'a_s',
               # <-----------------------------------'b': 'b_s'
    'c': 'c_s',
}

# expected output:
D = {
    'a': 'a_s',
    'b': 'b_s',
    'c': 'c_s',
}

# output actually got:
D = {
    'a': 'a_s',
    'b': 'b_s', 'c': 'c_s',
}

########## Example 2: insert the "'y':'y_s'" into dict D by alphabet order
D = {
    'a': 'a_s',
    'c': 'c_s',
                   # <-----------------------------------'y': 'y_s'
}

# expected output:
D = {
    'a': 'a_s',
    'c': 'c_s',
    'y': 'y_s',
}

# output actually got:
D = {
    'a': 'a_s',
    'c': 'c_s', 'y': 'y_s',
}

Notes: This should be supported by a collection_insert (or similar) function, taking the collection node (e.g. a Dict), the node (or nodes) to insert, and the index to insert at. This should result in consistent formatting as described above.