From 9cf4d9e26f07e31cb04888c00779900c91718f1b Mon Sep 17 00:00:00 2001
From: tv <tv@krebsco.de>
Date: Tue, 13 Aug 2019 00:15:26 +0200
Subject: [PATCH] tv vim nix: add `comment`

---
 tv/5pkgs/vim/nix.nix | 40 ++++++++++++++++++----------------------
 1 file changed, 18 insertions(+), 22 deletions(-)

diff --git a/tv/5pkgs/vim/nix.nix b/tv/5pkgs/vim/nix.nix
index 747ab0bc0..1998f9d72 100644
--- a/tv/5pkgs/vim/nix.nix
+++ b/tv/5pkgs/vim/nix.nix
@@ -63,16 +63,27 @@ with import <stockholm/lib>;
     syn cluster nix_ind_strings contains=NixIND_STRING
     syn cluster nix_strings contains=NixSTRING
 
-    ${concatStringsSep "\n" (mapAttrsToList (name: {
+    ${concatStringsSep "\n" (let
+      alts = xs: ''\(${concatStringsSep ''\|'' xs}\)'';
+      capitalize = s: let
+        xs = stringToCharacters s;
+      in
+        toUpper (head xs) + concatStrings (tail xs);
+      comment = k: ''/\* ${k} \*/'';
+      def = k: ''${k}[ \t\r\n]*='';
+      writer = k: ''write${k}[^ \t\r\n]*[ \t\r\n]*\("[^"]*"\|[a-z]\+\)'';
+      writerExt = k: writerName ''[^"]*\.${k}'';
+      writerName = k: ''write[^ \t\r\n]*[ \t\r\n]*"${k}"'';
+    in mapAttrsToList (name: {
       extraStart ? null,
       lang ? name
     }:
     let
       startAlts = filter isString [
-        ''/\* ${name} \*/''
+        (comment name)
         extraStart
       ];
-      sigil = ''\(${concatStringsSep ''\|'' startAlts}\)[ \t\r\n]*'';
+      sigil = ''${alts startAlts}[ \t\r\n]*'';
     in /* vim */ ''
       syn include @nix_${lang}_syntax syntax/${lang}.vim
       if exists("b:current_syntax")
@@ -111,22 +122,7 @@ with import <stockholm/lib>;
       " This is required because containedin isn't transitive.
       syn cluster nix_has_dollar_curly
         \ add=@nix_${lang}_syntax
-    '') (let
-
-      # TODO move this higher
-      capitalize = s: let
-        xs = stringToCharacters s;
-      in
-        toUpper (head xs) + concatStrings (tail xs);
-
-      alts = xs: ''\(${concatStringsSep ''\|'' xs}\)'';
-      def = k: ''${k}[ \t\r\n]*='';
-      writer = k: ''write${k}[^ \t\r\n]*[ \t\r\n]*\("[^"]*"\|[a-z]\+\)'';
-
-      writerExt = k: writerName ''[^"]*\.${k}'';
-      writerName = k: ''write[^ \t\r\n]*[ \t\r\n]*"${k}"'';
-
-    in {
+    '') {
       c = {};
       cabal = {};
       diff = {};
@@ -136,10 +132,10 @@ with import <stockholm/lib>;
         (writer "Jq")
         (writerExt "jq")
       ];
-      javascript.extraStart = ''/\* js \*/'';
+      javascript.extraStart = comment "jq";
       lua = {};
       #nginx = {};
-      python.extraStart = ''/\* py \*/'';
+      python.extraStart = comment "py";
       sed.extraStart = writer "Sed";
       sh.extraStart = let
         phases = [
@@ -172,7 +168,7 @@ with import <stockholm/lib>;
       ];
       xdefaults = {};
       xmodmap = {};
-    }))}
+    })}
 
     " Clear syntax that interferes with nixINSIDE_DOLLAR_CURLY.
     syn clear shVarAssign