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.
Singapore Grand Prix
'Really unfortunate' - Hamilton counts cost of mistakes at Singapore Grand Prix
"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.
Singapore Grand Prix
'Incredibly messy' - Verstappen rues missed chance to win world championship
Singapore Grand Prix
Perez celebrates 'best performance' after dominant Singapore victory