ctrl+shift+p filters: :st2 :st3 :win :osx :linux
Browse

Any​Swap

by wolray ST3

No description provided

Details

Installs

  • Total 135
  • Win 110
  • Mac 17
  • Linux 8
Sep 17 Sep 16 Sep 15 Sep 14 Sep 13 Sep 12 Sep 11 Sep 10 Sep 9 Sep 8 Sep 7 Sep 6 Sep 5 Sep 4 Sep 3 Sep 2 Sep 1 Aug 31 Aug 30 Aug 29 Aug 28 Aug 27 Aug 26 Aug 25 Aug 24 Aug 23 Aug 22 Aug 21 Aug 20 Aug 19 Aug 18 Aug 17 Aug 16 Aug 15 Aug 14 Aug 13 Aug 12 Aug 11 Aug 10 Aug 9 Aug 8 Aug 7 Aug 6 Aug 5 Aug 4
Windows 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Mac 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Readme

Source
raw.​githubusercontent.​com

Any Swap

A plugin of Sublime Text 3 that helps user to swap parameters, lines, and expressions from current cursor.

Behaves just like Move-Element-Left/Right in IntelliJ's IDEs, but more intelligently. It is based on a general abstract-syntax-tree analyzer that enables user to swap complicated expressions recursively while maintaining a correct operator precedence.

Usage

First of all, install package AnySwap via Package Control (not published yet) or clone this repo into your Sublime Text 3/Packages/ folder.

Bind command any_swap with parameter forward equals true or false to keys that you prefer. The command is set to alt+[ and alt+] by default.

{ "keys": ["alt+["], "command": "any_swap", "args": {"forward": false} },
{ "keys": ["alt+]"], "command": "any_swap", "args": {"forward": true} },

Place your cursor (|) on the begin/end of a word/paren, then trigger the command.

Features

Parameters:

func(a|, b)         => func(b, a|)         => func(|a, b)
func(int a|, int b) => func(int b, int a|) => func(|int a, int b)

Lines:

a|, b   =>  b, a|   =>  c, d
c, d        c, d        b, a|

Math expressions:

a| * b + c   => b * a| + c   => c + b * a|
(a| + b) * c => (b + a|) * c => c * (b + a)|

Expressions with functions:

func(a| + b, c) * d => func(b + a|, c) * d  => func(c, b + a|) * d   => d * func(c, b + a)|

Expressions with nested functions:

func(a().b(c| + d), f)  => func(a().b(d + c|), f)   => func(f, a().b(d + c)|)

Logic expressions:

a| and b or c   => b and a| or c    => c or b and a|
if a| and b     => if b and a|

Array expressions:

a[0|][1]        => a[1][0|]
a[b[c| + 1]][0] => a[b[1 + c|]][0] => a[0][b[1 + c]|]

Statements:

a = 1|; b = 2;     => b = 2; a = 1;|
return a|, b     => return b, a|

Cross-line expressions:

func(a|, => func(b,
    b)          a|)