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

Any​Swap

by wolray ST3

No description provided

Details

Installs

  • Total 345
  • Win 256
  • Mac 50
  • Linux 39
Aug 11 Aug 10 Aug 9 Aug 8 Aug 7 Aug 6 Aug 5 Aug 4 Aug 3 Aug 2 Aug 1 Jul 31 Jul 30 Jul 29 Jul 28 Jul 27 Jul 26 Jul 25 Jul 24 Jul 23 Jul 22 Jul 21 Jul 20 Jul 19 Jul 18 Jul 17 Jul 16 Jul 15 Jul 14 Jul 13 Jul 12 Jul 11 Jul 10 Jul 9 Jul 8 Jul 7 Jul 6 Jul 5 Jul 4 Jul 3 Jul 2 Jul 1 Jun 30 Jun 29 Jun 28
Windows 0 0 0 0 0 0 0 1 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 1 0 0 0 0 0 0 0 0 1
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 3 0 0 0 0 0 0 0 0 1 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|)