Yeah, in case of multiple layers and two directions I would first call view(num_layers, num_directions, batch, hidden_size) to separate the hidden state cleanly.
The [-1] is simply to get the hidden state(s) of the last layer, given that the shape is (num_layers, num_directions, batch, hidden_size), i.e., the shape of final_state after that is (num_directions, batch, hidden_size). If num_directions=1 so the shape is (1, batch, hidden_size), I only need the squeeze(). If num_direction=2 so the shape is (2, batch_size, hidden) I can access the two directions with [0] and [1].
So instead of final_state, a better name would probably be last_layer_hidden_state or something.