Objective-C文档中@weakify/strongify发布后异常高亮问题求助
解决Objective-C代码中@weakify/@strongify异常高亮问题
问题描述
用Github Markdown编写Objective-C相关文档时,使用```objc标记的代码块里,@weakify(self)和@strongify(self)在文档网站发布后会显示为红底白字的异常高亮状态,但在Github预览中完全正常。尝试改用objective-c标记时,代码仅显示为纯灰色,没有正常的语法高亮效果。
代码示例:
@weakify(self); [self.bannerAdUnit fetchDemandWithAdObject:gamRequest completion:^(enum ResultCode resultCode) { @strongify(self); }];
核心原因
文档网站使用的语法高亮引擎(比如Prism、Highlight.js)对Objective-C的第三方自定义宏(@weakify/@strongify属于ReactiveCocoa的常用宏)支持不足,误将其识别为错误语法;而Github使用的linguist高亮引擎对这类常见第三方宏有更好的兼容性。
可行解决方法
换用更兼容的代码标记
尝试用```m标记(Objective-C源文件的后缀名,部分高亮引擎对.m文件的语法规则支持更全面):@weakify(self); [self.bannerAdUnit fetchDemandWithAdObject:gamRequest completion:^(enum ResultCode resultCode) { @strongify(self); }];自定义语法高亮规则
如果网站使用Prism或Highlight.js,可以添加自定义规则,把@weakify和@strongify纳入合法关键字范围:
以Prism为例,添加如下JS代码:Prism.languages.objc = Prism.languages.extend('clike', { 'keyword': /\b(?:auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|restrict|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|@weakify|@strongify)\b/ });临时转义处理
把@weakify和@strongify用反引号单独包裹,避免被高亮引擎误判:`@weakify`(self); [self.bannerAdUnit fetchDemandWithAdObject:gamRequest completion:^(enum ResultCode resultCode) { `@strongify`(self); }];更换高亮引擎
如果网站支持,切换到和Github一致的linguist驱动的高亮方案(比如rouge),能天然兼容这类Objective-C第三方宏。
内容的提问来源于stack exchange,提问作者T1D
相关产品推荐
相关产品推荐

