Home Download Buy Blog Forum Support

RegReplace Plugin

Re: RegReplace Plugin

Postby highend on Sat Jan 21, 2012 3:37 pm

Hi,

I'm using this entry in the reg_replace.sublime-settings file:

Code: Select all
      "remove_empty_lines": {
         "find": "^[ \\t]*$\\r?\\n",
         "replace": "",
         "scope_filter": ["!comment"],
         "greedy": true,
         "case": true
      },


But if I execute it via the palette, only empty lines inside comments are deleted. Is the scope filter working correctly or is it a small bug?

I've used the v0.7 before I did the update to v0.8 today. Does an update overwrite the reg_replace.sublime-settings file (I've had stored
my code there before and I had to add it again after the update)?

Thanks for making this plugin, it's a pleasure to work with!

Regards,
Highend
highend
 
Posts: 93
Joined: Fri Jan 20, 2012 2:47 pm

Re: RegReplace Plugin

Postby facelessuser on Sat Jan 21, 2012 3:50 pm

I am aware that "!" is traditionally used in a "not" since in programming. In early development I was asking what people preferred, but I never got an answer...the plugin was really too new to have many people actually using it.

What you are using says the entire match must be of a "comment" scope to be a qualifying match. Without the "!", it would mean if any part of the match was comment, it is a qualifying match. You can see the comments I left in the default settings file.

Code: Select all
//     scope_filter: an array of scope qualifiers for the match.
//                       - Any instance of scope qualifies match: scope.name
//                       - Entire match of scope qualifies match: !scope.name
//                       - Any instance of scope disqualifies match: -scope.name
//                       - Entire match of scope disqualifies match: -!scope.name


Bascially the notation you are using is incorrect for what you want. If you want to avoid comments you want to use the "-" symbol, which translates if any part of the match is a comment, it is a match to be ignored or disqualified. "-!" means if the entire match is of scope type, then it is disqualified.

You probably want this.
Code: Select all
-comment


If there indeed is a bug let me know, and I will promptly fix it.
Last edited by facelessuser on Sat Jan 21, 2012 4:33 pm, edited 1 time in total.
facelessuser
 
Posts: 1446
Joined: Tue Apr 05, 2011 7:38 pm

Re: RegReplace Plugin

Postby highend on Sat Jan 21, 2012 4:03 pm

If there indeed is a bug let me know, and I will promptly fix it.


No, there isn't. You are absolute right, using -comment works as expected.

Thanks a lot for your help.

--
Highend
highend
 
Posts: 93
Joined: Fri Jan 20, 2012 2:47 pm

Re: RegReplace Plugin

Postby facelessuser on Sun Jan 22, 2012 4:23 am

I tried to use RegReplace to create a simple sequence to swap quotes of all double quoted strings, or all single quoted strings. I wanted to ensure it woud work in all languages regardless of whether they used "double quoted" or "single quoted" scope types. It was really hard, so I figured there had to be a better way. This lead me to add a new feature.

# Version 0.9
- Allow multipass on a scope region with regex with new "multi_pass_regex" parameter

This allowed me to use a scope search with regex qualifiers, and identify all string regions. I then used regex to determine if they were single or double quoted and find all internal quotes that needed to be escaped and unescaped within the string.

Regex defines for swapping from double to single quotes
Code: Select all
      "swap_quotes_to_single": {
         "scope": "string",
         "find" : "^\"(.*?)\"$",
         "replace": "'\\1'",
         "greedy_replace": false
      },
      "escape_single_quotes": {
         "scope": "string",
         "find" : "^(\".*?(?<!\\\\))((?:[\\\\]{2})*)'(.*?\")$",
         "replace": "\\1\\2\\'\\3",
         "greedy_replace": false,
         "multi_pass_regex": true
      },
      "unescape_quotes_double": {
         "scope": "string",
         "find" : "^('.*?(?<!\\\\))((?:[\\\\]{2})*)\\\\\"(.*?')$",
         "replace": "\\1\\2\"\\3",
         "greedy_replace": false,
         "multi_pass_regex": true
      },


Regex defines for swapping for single to double quotes
Code: Select all
      "swap_quotes_to_double": {
         "scope": "string",
         "find" : "^'(.*?)'$",
         "replace": "\"\\1\"",
         "greedy_replace": false
      },
      "escape_double_quotes": {
         "scope": "string",
         "find" : "^('.*?(?<!\\\\))((?:[\\\\]{2})*)\"(.*?')$",
         "replace": "\\1\\2\\\"\\3",
         "greedy_replace": false,
         "multi_pass_regex": true
      },
      "unescape_single_quotes": {
         "scope": "string",
         "find" : "^(\".*?(?<!\\\\))((?:[\\\\]{2})*)\\\\'(.*?\")$",
         "replace": "\\1\\2'\\3",
         "greedy_replace": false,
         "multi_pass_regex": true
      }


The commands
Code: Select all
   // Swap Quotes
   {
      "caption": "Replace: Swap Quotes to Single",
      "command": "reg_replace",
      "args": {"replacements": ["escape_single_quotes", "swap_quotes_to_single", "unescape_double_quotes"], "find_only": true}
   },
   {
      "caption": "Replace: Swap Quotes to Double",
      "command": "reg_replace",
      "args": {"replacements": ["escape_double_quotes", "swap_quotes_to_double", "unescape_single_quotes"], "find_only": true}
   }


Now it is easy :).
facelessuser
 
Posts: 1446
Joined: Tue Apr 05, 2011 7:38 pm

Re: RegReplace Plugin

Postby facelessuser on Sun Jan 22, 2012 10:42 pm

Version 1.0
- Add "literal" param for scope search defines.
- Reduce code complexity

That finishes off everything I had planned (now I can stop tinkering with this). Scope searches with literal search qualifiers cannot use "multi_pass_regex" param (it will just be ignored). There is really no need for it since literals have no trouble finding all instances. If in the future people find a scenario where there is useful, I will add it, but until then, I think this plugin is feature complete.

I am open to improvements or new feature ideas; just drop a post here explaining what it is you want, and I will evaluate the request and decide.

If you find any bugs, let me know.
facelessuser
 
Posts: 1446
Joined: Tue Apr 05, 2011 7:38 pm

Re: RegReplace Plugin

Postby facelessuser on Tue Jan 24, 2012 4:29 pm

Small fix:

# Version 1.1
- Faster unfold when many regions to unfold
facelessuser
 
Posts: 1446
Joined: Tue Apr 05, 2011 7:38 pm

Re: RegReplace Plugin

Postby facelessuser on Sat Jan 28, 2012 4:04 pm

Didn't realize that view.folded_regions() was not included in the latest official beta (not dev builds). So I added the old unfold method again with a threshold for those who are still using the latest official beta. A message will pop up when the threshold is reached alerting the user of what has happened and will explain that upgrading to the latest beta build will fix this. So now this will work on anybodies install as long as they are not grossly outdated.

Old methods of unfold will be deprecated on the next official beta.

Version 1.2.1
- Account for people still on the last offical beta since view.folded_regions() is not included in that release. This method of unfold will be deprecated on new ST2 offical beta release.
facelessuser
 
Posts: 1446
Joined: Tue Apr 05, 2011 7:38 pm

Re: RegReplace Plugin

Postby facelessuser on Thu Mar 01, 2012 10:29 pm

Version 1.3
- Add the ability to apply regex sequences right before a file save event. Files are targeted with user defined file patterns.

Just add the on save sequences to reg_replace.sublime-settings
You can create as many on save sequences as you want, and they can all target different files. If a file matches multiple sequences, then the sequences will be strung together as one sequence.

Included example. on_save is turned off by default.
Code: Select all
// If on_save is true, RegReplace will search through the file patterns listed below right before a file is saved,
// if the file name matches a file pattern, the sequence will be applied before the file is saved.
// RegReplace will apply all sequences that apply to a given file in the order they appear below.
"on_save": true,
"on_save_sequences": [
    // An example on_save_sequence that targets all files and trims trailing spaces
    // - file_pattern: an array of file patterns that must match for the sequence to be applied
    // - sequence: an array of replacement definitions to be applied on saving the file
    {"file_pattern": ["*"], "sequence": ["remove_trailing_spaces"]}
],
facelessuser
 
Posts: 1446
Joined: Tue Apr 05, 2011 7:38 pm

Re: RegReplace Plugin

Postby facelessuser on Fri Mar 02, 2012 4:46 am

One more small update

Version 1.4
- Allow on save regex sequences to define target files with regex as well as unix file name pattern matching
- Add example "remove_dangling_commas" replacement definition
- Add example on_save sequence using file regex pattern to remove dangling commas from sublime json files

Decided to allow "on_save_sequences" to use unix file name pattern matching and/or regex (you can use either or both).

Example:
Code: Select all
"on_save_sequences": [
      // An example on_save event that removes dangling commas from json files
      // - file_regex: an array of regex strings that must match the file for the sequence to be applied
                // - case: regex case sensitivity (true|false) false is default (this setting is optional)
      // - file_pattern: an array of file patterns that must match for the sequence to be applied
      // - sequence: an array of replacement definitions to be applied on saving the file
      {
         "file_regex": [".*\\.sublime-(settings|commands|menu|keymap|mousemap|theme|build|project|completions|commands)"],
         "file_pattern": ["*.json"],
         "sequence": ["remove_json_dangling_commas"]
      },
facelessuser
 
Posts: 1446
Joined: Tue Apr 05, 2011 7:38 pm

Re: RegReplace Plugin

Postby facelessuser on Fri Mar 09, 2012 3:49 am

Version 1.5.1

Now allows you to specify sequences to that only highlight instead of replace on save. Also added the ability to have the on save replacement sequences use multipass if desired. Highlight on save sequences and replace on save sequences can coexist; replacements are run first, and then highlights are performed. The read me gives more details.
facelessuser
 
Posts: 1446
Joined: Tue Apr 05, 2011 7:38 pm

PreviousNext

Return to Plugin Announcements

Who is online

Users browsing this forum: No registered users and 8 guests