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

Any​Swap

by wolray ST3

No description provided

Details

Installs

  • Total 318
  • Win 239
  • Mac 49
  • Linux 30
Nov 10 Nov 9 Nov 8 Nov 7 Nov 6 Nov 5 Nov 4 Nov 3 Nov 2 Nov 1 Oct 31 Oct 30 Oct 29 Oct 28 Oct 27 Oct 26 Oct 25 Oct 24 Oct 23 Oct 22 Oct 21 Oct 20 Oct 19 Oct 18 Oct 17 Oct 16 Oct 15 Oct 14 Oct 13 Oct 12 Oct 11 Oct 10 Oct 9 Oct 8 Oct 7 Oct 6 Oct 5 Oct 4 Oct 3 Oct 2 Oct 1 Sep 30 Sep 29 Sep 28 Sep 27
Windows 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 1 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 1 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 1 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|)