有没有办法可以clang-format在报告文件是否符合指定格式的模式下运行?一种干运行模式,它报告是否需要更改,但不进行更改.理想情况下,如果文件需要更改,我希望clang-format只返回非零退出代码.或者,更理想的是,非零退出代码和需要在标准输出上进行更改的文件列表.
我试图将问题保持通用,以便更多人可以回答,但我想要做的是编写一个git pre-commit钩子,它将拒绝任何与预期的.clang格式不匹配的提交.在索引中的文件列表上运行clang-format很容易.但是很难知道clang格式是否真的改变了什么.
我有一个潜在的解决方案-output-replacements-xml(我将作为答案发布),但它是一个黑客,我觉得这应该更直接.欢迎提出意见/建议,编辑,不同的答案/方法.
我一直在使用mogenerator一段时间,虽然在命令行选项上有一个合理的入门指南和Stack Exchange文章,但我还没有找到它提供的所有功能的良好指南. 简而言之:除了Core Data为您提供的类之外,Mogenerator实际生成了什么?
(坦率地说,我一直在标题/实现中找到一些令人惊喜的惊喜,我没有意识到它们在那里,我决定逐步完成生成器模板和代码并记录我在Stack Exchange Q&A中发现的内容.我很乐意但是,请参阅其他答案和修改.)
我意识到这个问题存在一些主观性,但考虑到Apple开发对于命名约定非常自以为是,我想以其他人理解我的编码工作的方式来做这件事.我试图以最通用的方式提出问题,但我会在评论中添加一些我的具体细节,以防它影响你的答案.
假设我支持iOS 6和iOS 7.现有类上有一种新方法,只存在于iOS 7 SDK中.假设以对我的应用程序"足够好"的方式实现功能是相当简单的.但是,当然,我宁愿使用SDK版本,因为它可能更好地支持,更有效,更好地处理边缘情况.
正如本问答中所述,处理这种情况很简单.
if ([myInstance respondsToSelector:@selector(newSelector)]) {
//Use the SDK method
} else {
//Use my "good enough" implementation.
}
Run Code Online (Sandbox Code Playgroud)
但我不想在一大堆条件调用中丢弃我的代码.似乎封装这种动态方法选择会更好.(特别是在我的情况下,该方法尚未实际发货且名称/签名可能会发生变化.)
我的直觉是添加一个实现我的功能的类类别以及实现这种动态选择方法的包装器方法.
这是正确的方法吗?如果是这样,我应该使用哪些命名约定?(我显然不能将我的方法命名为与iOS7方法相同,否则会出现命名冲突.)
我的直觉反应是调用我的包装器方法safeNewSelector和我的实现一个名为lwNewSelector的私有方法(其中lw是我的标准类前缀).但我宁愿使用一些被认为是标准命名约定的东西.
我有一个带有+initialize方法的托管核心数据对象.(如果重要的话,我希望使用该方法初始化一个设置成本昂贵的静态变量.)在测试初始化代码时,我惊讶地发现该+initialize方法被调用了两次.
initialize被调用的第一次被self定义为(Class) MyClass,正如我所期望的那样.
第二次initialize被调用self被定义为(Class) MyClass_MyClass_,这使我怀疑Core Data托管对象的某种异常初始化.
虽然这对我来说不会造成问题(我可以测试一下静态变量是否已经初始化,无论如何我都会做,处理ubclassing),但这让我怀疑Core Data是在对象中做了什么或类生命周期,我不明白.有人可以向我解释这个MyClass_MyClass_ +initialize方法调用中发生了什么吗?
当前代码如下:
case object LatestMessageSignal
class MessageCheckpoint(implicit ec: ExecutionContext) extends Actor with ActorLogging with Timers {
override def receive: Receive = {
case LatestMessageSignal => awaitLatestMessageSignal()
}
private def awaitLatestMessageSignal(): Unit = {
import scala.concurrent.duration._
context.system.scheduler.scheduleOnce(30.seconds) {
context.stop(self)
}
}
}
Run Code Online (Sandbox Code Playgroud)
当actor收到LatestMessageSignal消息时,它会调用awaitLatestMessageSignal()等待30秒的方法,然后停止actor。
core-data ×2
objective-c ×2
actor ×1
akka ×1
clang-format ×1
cocoa ×1
git ×1
mogenerator ×1
scala ×1