everyone on my dash is screaming “HE WAS SO GOING TO SAY HE LOVED HIM” , but he did say that, weren’t you paying attention?
Sherlock and John don’t communicate the way “normal” people do - how could they? One is an adrenaline junkie who seeks out bullets even after one left a web of dead cells on his shoulder and the other introduces himself as a “high functioning sociopath” to protect himself from his own emotions (because his childhood pet died - I’m crying into eternity over that.)
So what did we see?
He took his glove off when he shook John’s hand, he offered his name, full name, to be theirs - remember how John hates his name, but “gives” it whilst Sherlock is, to his eyes, flirting with Irene?
He shot a man. He shot a man. In the head. Point blank, no regrets. He shot a man for John Watson. He jumped in a fire for John Watson. He jumped off a roof for John Watson.
He helped pick out the colour for the bride’s maid’s dresses for John Watson. He wrote that best man’s speech for John Watson. He saved “the most unsociable man he’s ever met” for John Watson.
He moved John’s chair because he couldn’t bear to see it vacant. (or for Janine to sit in it? It’s John’s after all.)
He got bloody engaged to ensure John’s wife was fine.
He fucking bought himself back into consciousness with the thought “John Watson is in danger” after being shot.
He let John choose if he wanted Mary to stay. He only told John “six months”, so he wouldn’t worry him, because that’s not on - John can’t worry, because John Watson is his top priority.
He knew he was going to his death so he made that joke about his name so he would see John Watson smile.
He did all that fully knowing that while John is his pressure point, he is not John’s.
If that’s not an “I love you”, than, my dear fandom, I don’t know what more do you want.