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

Any​Swap

by wolray ST3

No description provided

Details

Installs

  • Total 253
  • Win 191
  • Mac 40
  • Linux 22
May 13 May 12 May 11 May 10 May 9 May 8 May 7 May 6 May 5 May 4 May 3 May 2 May 1 Apr 30 Apr 29 Apr 28 Apr 27 Apr 26 Apr 25 Apr 24 Apr 23 Apr 22 Apr 21 Apr 20 Apr 19 Apr 18 Apr 17 Apr 16 Apr 15 Apr 14 Apr 13 Apr 12 Apr 11 Apr 10 Apr 9 Apr 8 Apr 7 Apr 6 Apr 5 Apr 4 Apr 3 Apr 2 Apr 1 Mar 31 Mar 30
Windows 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 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 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 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 1 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|)