"Code sniffing" and "code linting" are two similarly named common practices which appear to have subtle differences. I currently confuse these terms in the same way I used to confuse weakly vs strongly typed with static vs dynamic typed, or parameters with arguments.
I've seen "sniffing" and "linting" either optionally implemented locally, or automatically checked and enforced during the CI/CD process.
What is code sniffing and code linting and what is the disambiguation between the two?