Red Bull's Max Verstappen will start the French Grand Prix on pole, registering a time of 1:29.990.
Lewis Hamilton (Mercedes) finished second 0.258s down on his title rival.
Valtteri Bottas found almost a second on his final lap to take third just behind Hamilton and narrowly ahead of the other Red Bull of Sergio Perez. Carlos Sainz (Ferrari) came fifth.
Horner 'surprised' by Mercedes straight-line speed
"So far it's been a really positive weekend, on a track where it's normally been a bit difficult for us," Verstappen said.
"To get pole position feels really nice. It's a great day. We have to finish it off tomorrow and try and get the 25 points we lost in Baku."
Hamilton was not happy with his car.
"It's been a really, really hard weekend. Mentally, and just trying to get the car into a happy place," he said.
"You wouldn't believe how many changes I've made since Practice One, going round and round chasing our tails and ending up coming back to something similar to where we started.
"I've generally been unhappy in the car all weekend."
Alpha Tauri's Pierre Gasly, Ferrari's Charles Leclerc, McLaren's Lando Norris, Alpine's Fernando Alonso and the second McLaren of Daniel Ricciardo rounded out the top 10.
Hamilton denies he was 'furious' with Mercedes for Istanbul strategy
Turkish Grand Prix
'It's a possibility' - Hamilton weighing up engine penalty for Turkish GP