Looks like by turning on semantic snippets, Roslyn has inadvertently broken our completion and @if no longer appears. The speculation is that this is caused because typing @i generates C# similar to __o = i and Roslyn is now smart enough to know that if is not valid there.
We might just need to resurrect our own snippets for these, eg from https://github.com/dotnet/razor-tooling/pull/3956/files#diff-052d5834149367e2bcf4d95d0740ddb4b346116cfcd64e568d0b5eca38f7b8aeR299-R315 as we presumably do want semantic snippets to work fully in other C# contexts in Razor files.
/cc @ToddGrun