ehuss / Sublime-Wrap-Plus

Enhanced "wrap lines" command for Sublime Text 2 or 3.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Multi-line C-style comments with more than one space indent aren't wrapped correctly

vanrijn opened this issue · comments

Hi there. Here's an example that I'm having a problem with.

Given the following comment:

/*

  • Summary:
  •   Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
    

I want this to be wrapped like this:

/*

  • Summary:
  •   Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
    
  •   incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
    
  •   exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute 
    
  •   irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
    
  •   pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
    
  •   deserunt mollit anim id est laborum
    

So I highlight just the "Lorem ipsum" line, starting at the beginning of the line and invoke wrap plus. But it's instead wrapped like this:

/*

  • Summary:
  •   Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
     incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
     exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute 
     irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
     pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
     deserunt mollit anim id est laborum
    

I hope this example is clear enough. Is there a config value I can set to fix this?

Thank you!

That works for me. What syntax are you using? Which version of Sublime? Does it matter if you select the line, or if it's just an empty cursor?

I just pushed an update that exposes debugging as a configuration variable. Update the package and add "WrapPlus.debug": true to your User Preferences and copy the output from the console here.

Hey there! Wow, thanks for the quick response! =:)

I've tried with syntax set to text, C/C++, Objective-C++, and no difference in the end result.

I've tried to select the whole line. I've also positioned the cursor at the beginning of the line, at the end of the line, and at the line above that has the "/*". all of these result in this:

/*

  • Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
    tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
    quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
    consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
    proident, sunt in culpa qui officia deserunt mollit anim id est laborum

Hm, Package Control doesn't want to update your package. Or at least, I restart Sublime Text and add "WrapPlus.debug": true" to my user prefs and I don't get anything form WrapPlus in my console.

Actually, nevermind, I restarted ST3 and now it works. Here's what I see:

0.000 (+0.000) #########################################################################
0.000 (+0.000) wrap width = 80
0.001 (+0.000) examine (3, 451)
0.001 (+0.000) find paragraphs sr=(3, 451)
0.001 (+0.000) paragraph scanning start 3.
0.002 (+0.001) scope='source.objc++ comment.block.c ' range=(0, 451)
0.002 (+0.000) Scope narrowed to 3:451
0.002 (+0.000) required_comment_prefix determined to be ''
0.003 (+0.000) line=' * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum'
0.003 (+0.000) sel beggining = (3, 450) ' * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum'
0.003 (+0.000) skip blank line
0.004 (+0.001) scope_name='source.objc++ comment.block.c ' ((3, 450))
0.004 (+0.000) not paragraph break
0.004 (+0.000) Scan until end of paragraph.
0.004 (+0.000) current_line_r=(3, 450) max=451
0.005 (+0.001) next line region=(3, 450)
0.005 (+0.000) past max at 451
0.005 (+0.000) Out of range, stopping.
0.005 (+0.000) skip over blank lines
0.005 (+0.001) initial_prefix=' * ' subsequent_prefix=' '
0.006 (+0.000) replaced text not the same:
original=' * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum'
new=' * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod\n tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\n quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\n consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse\n cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non\n proident, sunt in culpa qui officia deserunt mollit anim id est laborum'
Total time: 0.006

From the output, it looks like you have some kind of extra line or something before the end of the comment. In order for it to wrap with the asterisk prefix, every line must have an asterisk at the same indentation level (not including the beginning/end comment characters themselves). So the following works for me:

/*
 * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
 */

Whereas something like this does not:

/*
 * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

 */

Since you didn't paste the entire text, I'm not quite sure what you have after your first paragraph. Also, if you use the markdown formatting when pasting literal text (surrounded by triple backticks), that makes it a little easier to see things in bug reports.

Also, just FYI, while playing around I noticed this particular case doesn't handle tabs very well (but it doesn't look like you are using tabs).

Hey again. Sorry about that. Okay, yes, you're right, my example wasn't good enough to demonstrate. And if I add '*/' to the following line, that example does work properly. Here's an actual example of a header comment from the code I'm working on:

/*
 *-----------------------------------------------------------------------------
 *
 * +[Foo observationKeyPaths] --
 *
 *      The key paths being observed.
 *
 * Results:
 *      An NSArray of NSStrings. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
 *
 * Side effects:
 *      None
 *
 *-----------------------------------------------------------------------------
 */

What I want to end up with (and what WrapCode gives me) is this:

/*
 *-----------------------------------------------------------------------------
 *
 * +[Foo observationKeyPaths] --
 *
 *      The key paths being observed.
 *
 * Results:
 *      An NSArray of NSStrings. Lorem ipsum dolor sit amet, consectetur
 *      adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
 *      magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
 *      laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
 *      in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
 *      pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa
 *      qui officia deserunt mollit anim id est laborum
 *
 * Side effects:
 *      None
 *
 *-----------------------------------------------------------------------------
 */

What I end up with from Wrap Plus is this:

/*
 *-----------------------------------------------------------------------------
 *
 * +[Foo observationKeyPaths] --
 *
 *      The key paths being observed.
 *
 * Results:
 *      An NSArray of NSStrings. Lorem ipsum dolor sit amet, consectetur
        adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
        magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
        in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
        pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa
        qui officia deserunt mollit anim id est laborum
 *
 * Side effects:
 *      None
 *
 *-----------------------------------------------------------------------------
 */

Here's the debug lines from WrapPlus:

0.000 (+0.000) #########################################################################
0.000 (+0.000) wrap width = 80
0.001 (+0.000) examine (4269, 4746)
0.001 (+0.000) find paragraphs sr=(4269, 4746)
0.001 (+0.001) paragraph scanning start 4269.
0.002 (+0.000) scope='source.objc++ meta.implementation.objc meta.scope.implementation.objc comment.block.c ' range=(4094, 4866)
0.002 (+0.000) Scope narrowed to 4269:4747
0.002 (+0.000) required_comment_prefix determined to be ''
0.003 (+0.001) line=' *      An NSArray of NSStrings. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum'
0.003 (+0.000) sel beggining = (4269, 4746) ' *      An NSArray of NSStrings. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum'
0.003 (+0.000) skip blank line
0.004 (+0.001) scope_name='source.objc++ meta.implementation.objc meta.scope.implementation.objc comment.block.c ' ((4269, 4746))
0.004 (+0.000) not paragraph break
0.004 (+0.000) Scan until end of paragraph.
0.004 (+0.000) current_line_r=(4269, 4746) max=4747
0.006 (+0.001) next line region=(4269, 4746)
0.006 (+0.000) past max at 4747
0.006 (+0.000) Out of range, stopping.
0.006 (+0.000) skip over blank lines
0.008 (+0.002) initial_prefix=' *      ' subsequent_prefix='        '
0.008 (+0.000) replaced text not the same:
original=' *      An NSArray of NSStrings. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum'
new=' *      An NSArray of NSStrings. Lorem ipsum dolor sit amet, consectetur\n        adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore\n        magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco\n        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor\n        in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla\n        pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa\n        qui officia deserunt mollit anim id est laborum'
Total time: 0.009

Yea, it was getting tripped up by the dashes (it was requiring a space after the asterisk). I just pushed an update that removes that restriction. Update and let me know if that works for you.

Hm. Updated:

Package Control: Upgraded Wrap Plus to v2014.08.22.19.03.10

No, I'm still seeing this output from the same input:

/*
 *-----------------------------------------------------------------------------
 *
 * +[Foo observationKeyPaths] --
 *
 *      The key paths being observed.
 *
 * Results:
 *      An NSArray of NSStrings. Lorem ipsum dolor sit amet, consectetur
        adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
        magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
        in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
        pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa
        qui officia deserunt mollit anim id est laborum
 *
 * Side effects:
 *      None
 *
 *-----------------------------------------------------------------------------
 */

Here's the debug log.

0.000 (+0.000) #########################################################################
0.000 (+0.000) wrap width = 80
0.001 (+0.000) examine (175, 652)
0.001 (+0.000) find paragraphs sr=(175, 652)
0.001 (+0.001) paragraph scanning start 175.
0.002 (+0.000) scope='source.objc++ comment.block.c ' range=(0, 772)
0.002 (+0.000) Scope narrowed to 175:653
0.002 (+0.000) required_comment_prefix determined to be ''
0.002 (+0.000) line=' *      An NSArray of NSStrings. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum'
0.002 (+0.000) sel beggining = (175, 652) ' *      An NSArray of NSStrings. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum'
0.002 (+0.000) skip blank line
0.003 (+0.001) scope_name='source.objc++ comment.block.c ' ((175, 652))
0.003 (+0.000) not paragraph break
0.003 (+0.000) Scan until end of paragraph.
0.003 (+0.000) current_line_r=(175, 652) max=653
0.004 (+0.001) next line region=(175, 652)
0.004 (+0.000) past max at 653
0.004 (+0.000) Out of range, stopping.
0.004 (+0.000) skip over blank lines
0.005 (+0.001) initial_prefix=' *      ' subsequent_prefix='        '
0.005 (+0.000) replaced text not the same:
original=' *      An NSArray of NSStrings. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum'
new=' *      An NSArray of NSStrings. Lorem ipsum dolor sit amet, consectetur\n        adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore\n        magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco\n        laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor\n        in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla\n        pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa\n        qui officia deserunt mollit anim id est laborum'
Total time: 0.005

Hm, I'm at a loss on that. Restart Sublime? Double check with "Package Control: List Packages" that version 2014.08.22.19.03.10 is listed.

Weird. Restarting ST3 seemed to do it. =:/ Thanks so much for the help, @ehuss!! This will let me switch to your plugin instead of WrapCode, I think. =:)