Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Interpolation broken in eco #38

Closed
jneen opened this Issue · 10 comments

2 participants

@jneen

This is one that I struggled with for a long time, and I'm not exactly sure how to fix it. To reproduce, open a file with the extension .html.eco, and type:

<% { a: 1, b: 2 } %>
<% "#{ { a: 1, b: 2 } }" %>

The first line will be highlighted correctly, but the second gets very confused. My current guess as to why this is happening is that in coffee.vim, interpolation is configured with contains=TOP - but TOP in a coffeescript file is very different than TOP in an eco file. Ideas?

@kchmck
Owner

Yeah, looks like TOP is the problem. The only thing I can think of doing is to make a coffeeAll cluster with all the coffee syntaxes and use it instead of TOP.

@jneen

Yeah, I think that would work. I think TOP is one of those features that was around before people started using a lot of embedded templating languages. It's also too bad that it's completely global, and isn't contextualized by syn include. Oh well.

@kchmck
Owner

That wasn't too hard with

grep -E 'syn (match|region)' syntax/coffee.vim | awk '{print $3}' | uniq | grep -vE 'coffeeAssignSymbols|coffeeAssignBrackets|coffeeAssignString|coffeeTodo|coffeeHeregexComment|coffeeInterp|coffeeEscape' | tr '\n' ,

;)

I want to make sure I'm getting the same bug as you, though, since it might also be a bug in .coffee files. This is what I see (I actually had to add unlet b:current_syntax above line 41 to get any coffee highlighting):

bug

@jneen

Huh, interesting. The screenshot is exhibiting exactly the "broken" behavior I described - see how the expression within the interpolation isn't highlighted? Even worse, the interpolation "ends" at the } directly after the 2, and the rest is highlighted as a string. I'll post a better example with screenshots in a sec.

@jneen

Well, that's interesting - I seem to have uncovered another bug in interpolation:

syntax bug

Notice how, in the eco example, the inner object is not getting highlighted at all. But in both cases, the curly that's supposed to mark the end of the object literal is being highlighted as marking the end of the interpolation.

@kchmck
Owner

Alright, I think I finally fixed both of these. The second gave me problems because the html file added in 2bea011 includes coffee before eco, and including it twice breaks the fix for some reason.

I pushed to a fix-38 branch since d3f36e8 changes eco stuff and I want to make sure that looks good to you before going on master.

@jneen jneen referenced this issue from a commit in jneen/vim-coffee-script
@jneen jneen add an eco test (#38) 102d931
@jneen

Sweet, thanks! It all looks good to me except for the last example in the eco test I've added, where the close-interpolation curly doesn't seem to be highlighted at all.

@kchmck
Owner

It works on my end for some reason:
vimz

@kchmck kchmck referenced this issue from a commit
@jneen jneen add an eco test (#38) 0e60494
@jneen

.... huh. Bizarre. I say ship it anyways, but just in case, here's my version info:

% vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Mar 24 2011 07:07:34)
Included patches: 1-35
Modified by pkg-vim-maintainers@lists.alioth.debian.org
Compiled by buildd@
Huge version with GTK2-GNOME GUI.  Features included (+) or not (-):
+arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent 
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments 
+conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con_gui +diff 
+digraphs +dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi 
+file_in_path +find_in_path +float +folding -footer +fork() +gettext 
-hangul_input +iconv +insert_expand +jumplist +keymap +langmap +libcall 
+linebreak +lispindent +listcmds +localmap +lua/dyn +menu +mksession 
+modify_fname +mouse +mouseshape +mouse_dec +mouse_gpm -mouse_jsbterm 
+mouse_netterm -mouse_sysmouse +mouse_xterm +multi_byte +multi_lang -mzscheme 
+netbeans_intg -osfiletype +path_extra +perl/dyn +persistent_undo +postscript 
+printer +profile +python/dyn +python3/dyn +quickfix +reltime +rightleft +ruby 
+scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop 
+syntax +tag_binary +tag_old_static -tag_any_white +tcl +terminfo +termresponse
 +textobjects +title +toolbar +user_commands +vertsplit +virtualedit +visual 
+visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup 
+X11 -xfontset +xim +xsmp_interact +xterm_clipboard -xterm_save 
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "$VIM/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
    system menu file: "$VIMRUNTIME/menu.vim"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK  -pthread -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/libdrm -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pixman-1   -pthread -DORBIT2=1 -D_REENTRANT -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/atk-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/libpng12 -I/usr/include/libdrm -I/usr/include/libgnomeui-2.0 -I/usr/include/libart-2.0 -I/usr/include/gconf/2 -I/usr/include/gnome-keyring-1 -I/usr/include/libgnome-2.0 -I/usr/include/libbonoboui-2.0 -I/usr/include/libgnomecanvas-2.0 -I/usr/include/gtk-2.0 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gnome-vfs-2.0 -I/usr/lib/gnome-vfs-2.0/include -I/usr/include/orbit-2.0 -I/usr/include/libbonobo-2.0 -I/usr/include/bonobo-activation-2.0 -I/usr/include/libxml2 -I/usr/include/gail-1.0 -I/usr/lib/gtk-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1     -Wall -g -O2 -D_FORTIFY_SOURCE=1    -I/usr/include/tcl8.4  -D_REENTRANT=1  -D_THREAD_SAFE=1  -D_LARGEFILE64_SOURCE=1  -I/usr/lib/ruby/1.8/x86_64-linux -DRUBY_VERSION=18 
Linking: gcc -L/usr/lib/x86_64-linux-gnu    -L. -Wl,-Bsymbolic-functions -rdynamic -Wl,-export-dynamic  -Wl,-E  -Wl,--as-needed -o vim   -pthread -L/usr/lib/x86_64-linux-gnu -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0   -L/usr/lib/x86_64-linux-gnu   -lgnomeui-2 -lbonoboui-2 -lgnomevfs-2 -lgnomecanvas-2 -lgnome-2 -lpopt -lbonobo-2 -lbonobo-activation -lORBit-2 -lart_lgpl_2 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgconf-2 -lgmodule-2.0 -lgobject-2.0 -lgthread-2.0 -lrt -lglib-2.0   -lXt -lncurses -lselinux   -lacl -lgpm -Wl,-E  -fstack-protector -L/usr/local/lib  -L/usr/lib/perl/5.10/CORE -L/usr/lib -ltcl8.4 -lieee -lruby1.8 -lrt -lm   
@kchmck
Owner

Alright, will do. It must be a patch between 35 and 206 or something. Thanks for reporting these!

@kchmck kchmck closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.