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

Any​Swap

by wolray ST3

No description provided

Details

Installs

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