coffee-script-tmbundle icon indicating copy to clipboard operation
coffee-script-tmbundle copied to clipboard

Collapse code fails in TM2 (Code Folding)

Open alanhogan opened this issue 13 years ago • 17 comments

Clicking the arrow to collapse text is a no-op in TM2 (build 8971).

alanhogan avatar Dec 21 '11 17:12 alanhogan

I'm suffering from this as well.

Is there an estimate when this can be fixed?

dwt avatar Mar 14 '12 11:03 dwt

Fix it yourself! It’s not too hard to learn how TM foldings work. For instance, the Python pattern is currently:

{ foldingIndentedBlockStart = '^\s*(class|def|for|while|if|elif|else|with|try|finally|except)\b.*:\s*(#.*)?$'; }

jrus avatar Mar 14 '12 19:03 jrus

Well, try as I might, I cannot get it to work. Whenever I have a -> in the regex it just fails to match anything.

It almost feels as if it is canceling out with some other rule from somewhere else. Maybe you can reproduce this and report a bug to TextMate from this - I'm just puzzled.

dwt avatar Mar 15 '12 20:03 dwt

Reporting as a TM bug would make sense then… After all, the same bundle worked in TM v1, I’m fairly sure.

On Mar 15, 2012, at 1:25 PM, dwt wrote:

Well, try as I might, I cannot get it to work. Whenever I have a -> in the regex it just fails to match anything.

It almost feels as if it is canceling out with some other rule from somewhere else. Maybe you can reproduce this and report a bug to TextMate from this - I'm just puzzled.


Reply to this email directly or view it on GitHub: https://github.com/jashkenas/coffee-script-tmbundle/issues/87#issuecomment-4528075

alanhogan avatar Mar 15 '12 20:03 alanhogan

Edit: Hmm. I’m getting some real weirdness around -> as well. Am asking Allan Odgaard about it. [...]

Unfortunately, I don’t have time today to do more debugging of the CoffeeScript grammar, or to rewrite it to better follow typical TM grammar conventions. I’ll try to follow this up sometime in the next few days though.

jrus avatar Mar 16 '12 22:03 jrus

Okay, @alanhogan @dwt the issue is that the grammar has foldings embedded (this is the way things were done in TM1). You have to go find the CoffeeScript.tmLanguage file on disk (an XML plist), and remove the foldingStartMarker and foldingStopMarker key-value pairs.

jrus avatar Mar 18 '12 04:03 jrus

@alanhogan @dwt @jashkenas

Okay, to mostly hit all the cases I’ve seen – and it seems to be working great – I deleted those two keys (i.e. foldingStartMarker and foldingStopMarker) from the language grammar itself and from any settings files, and added the following settings file:

{ foldingIndentedBlockStart = '(?x)
    \b class \b |            # class definition
    [=-]> \s* (\#.*)? $      # line-ending function arrow
    ';
}

Scoped to source.coffee -(source.coffee string). [It’s not clear to me whether it’s desirable to fold inside block comments or not.] This won’t deal with the edge case where the word class occurs inside a string that ends before the end of the line, or inside a comment (false positives), but those edge cases are really hard to catch without either tremendously complicating the rule or else getting false negatives, since arbitrary expressions can go inside the thing that gets assigned to a class, as in, to take an extreme example:

Baz = wrapper class a.b(c..., new (class extends Bar) '#', y: ->)[1] extends Foo

(Though admittedly, the current language grammar doesn’t bother to handle most tricky edge cases, resulting in fairly frequent wrong/missing scopes. Still, we might as well do the best we reasonably can in the folding rule, and we can fix the rest of the grammar some other day.)

jrus avatar Mar 18 '12 22:03 jrus

Is this something that would get backported for TM1? Or is it a TM2-specific change?

jashkenas avatar Mar 19 '12 15:03 jashkenas

The indented block foldings are TM2 specific.

jrus avatar Mar 19 '12 23:03 jrus

Uhm, but that means that you can't have one bundle that works with tm1 and tm2?

I would consider that a bug, the tm2 settings should override the tm1 settings so they can coexist in one bundle allowing backwards compatibility.

If necessary Allan can add another setting that tells tm2 to override that other key and then deprecate it once tm2 is out and final.

dwt avatar Mar 20 '12 07:03 dwt

That’s silly. TM1 is on the way out, and all the bundles can trivially be updated. The language grammar system, the scoping rules, and many other aspects of the app have been completely rewritten with new and better features. Once people actually start taking advantage of those, the resulting bundles will not function the same in TM1. The community hasn’t really stepped up to the plate yet to adopt all the neat new features, but it’s only a matter of time.

If you want a legacy TM1 bundle, there’s nothing wrong with keeping that one around separately someplace.

jrus avatar Mar 20 '12 20:03 jrus

Well, then how do I install separate bundles for tm1 and 2 again?

dwt avatar Mar 21 '12 07:03 dwt

Is there already a branch with the changes outlined above that I can test? I'll be working with coffee script quite a bit today.

dwt avatar Mar 21 '12 07:03 dwt

@dwt see http://blog.macromates.com/2011/locating-bundles/

As for a branch w/ the changes above, my fork of the bundle does this, and also has improved compile/run commands.

https://github.com/jrus/coffee-script-tmbundle/

Note that I haven’t really been keeping up with jeremy’s fork, planning at some point to just rewrite the language grammar and fix up the commands &c. to be more "textmate-ish"... best laid plans and all that.

jrus avatar Mar 22 '12 03:03 jrus

Am 22.03.2012 um 04:03 schrieb Jacob Rus:

@dwt see http://blog.macromates.com/2011/locating-bundles/

Got it, thanks!

Martin

dwt avatar Mar 22 '12 07:03 dwt

@jashkenas Now that TM2 is really moving again, after its OpenSourcing, can we get this in maybe? Or have a separate TM2 branch in this Repo on which this can go in?

alexandertrefz avatar Aug 13 '12 20:08 alexandertrefz

+1, this is still an issue.

Hoverbear avatar Jan 22 '13 17:01 Hoverbear