Fisheye/Crucible支持Kotlin语法高亮

8
截至 Crucible 版本 4.2.1,没有针对 Kotlin 文件的内置语法高亮支持。我已经为此提交了一个特性请求
然而,目前唯一的可能性是按照这里所述添加自定义语法配置。
有人已经做过了吗?能分享一下配置吗?
1个回答

2
我自己创建了这个文件。它基于Java配置,但使用Kotlin关键词。
项目还包含一个脚本来生成关键词的前缀树,如果你不喜欢我使用的列表。
下面是文件内容:
syntaxdef kotlin {


/\s+/m : ;
#keywords
/(a(bstract|nnotation|s)|break|c(atch|lass|o(mpanion|n(st|tinue))|rossinline)\
|d(ata|elegate|o|ynamic)|e(lse|num|xternal)|f(i(eld|le|nally)|or|un|alse)|get\
|i(f|mport|n(fix|it|line|terface)|s|t)|n(oinline|ull)|o(bject|pe(n|rator)|ut)\
|p(a(ckage|ram)|roperty)|re(ceiver|ified|turn)|s(e(aled|tparam)|u(per|spend))\
|t(ailrec|h(is|row)|r(y|ue)|ype(alias|of))|va(l|rarg)|wh(en|ile))\b/ : {
      region {
        type=keyword;
        index=word;
      }
}

/[\p{L}_\$][\p{L}\p{N}_\$]*/ : {
      region {
         type=identifier;
         index=word;
      }
  }

#annotation
/@[\p{L}_\$][\p{L}\p{N}_\$]*/ : {
      region {
         type=annotation;
         index=word;
      }
  }


# string literals
/"/ : {
    context {
            /\\"/: ;
            /\\./: ;
            /$/m : exit;
            "\"" : exit;
        }
        region ${ALL} {
               type=string;
        }
    }

# char literal
/'/ : {
    context {
            /\\./: ;
            /$/m : exit;
            "'" : exit;
        }
        region ${ALL} {
               type=char_literal;
        }
    }


/\/\/.*$/m : {
      todo(${0});
      region {
         type=comment;
         index=prose;
         findlinks=true;
      }
   }


/\/\*\*(.*?)\*\//s : {
      javadoc(${1});
      region {
         type=comment;
         index=prose;
         findlinks=true;
      }
   }

   context javadoc {

      /(\B@[a-zA-Z0-9-_.]+)\s*([^@\*]*)/ : {
         region ${1} {
            type=commentmeta;
         }
      }
   }

/(0x[0-9a-f][0-9a-f_]*l?)|(0b[0-1][0-1_]*l?)|([0-9][0-9_]*(\.[0-9][0-9_]*)?|\.[0-9][0-9_]+)(e(\+|-)?[0-9][0-9_]*)?(f|l|d)?/i : {
       region {
          type=numeric;
       }
   }

/\/\*(.*?)\*\//s : {
      todo(${1});
      region {
         type=comment;
         findlinks=true;
      }
      region ${1} {
         index=prose;
      }
   }

   context todo {
      /(?i)todo\s.*/ : {
        region {
          type=todo;
        }
      }

   }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接