I've always solved this with unit/functional tests. The test runner effectively acts as a compiler, for the purposes of checking the contact. in this process.
This is something that's baked into a gate check on merge to the source repo. Or rather it should be.
This is something that's baked into a gate check on merge to the source repo. Or rather it should be.