That depends. All features are contributed by users. Every few months Rich merges the pending pull requests and makes a release.
Buble uses the acorn ecmascript parser. If you want to take a crack at implementing this feature then look at the source code of rollup to see how the acorn comments API works.
This appears to match Babel's behavior of first pragma wins
Uhm, does Babel make a persistent change to its JSX pragma setting when it encounters such a comment?
So that a project with two or more different/** @jsx ... */ declarations has a somewhat unpredictable/arbitrary result?
However, I'll likely try to reverse the preference order, making comments override the CLI setting (for the current module only).
That's fine. As long as it matches Babel's behavior.
does Babel make a persistent change to its JSX pragma setting when it encounters such a comment?
So that a project with two or more different/** @jsx ... */ declarations has a somewhat unpredictable/arbitrary result?
Within one source file Babel appears to use the first jsx pragma encountered - regardless of its location in the file.
babel@5.8.29 appears to reset the jsx pragma for each new module, using the value of --jsx-pragma if present, otherwise React.createElement.
This following patch appears to match babel@5.8.29's behavior:
--- a/src/index.js+++ b/src/index.js@@ -46,17 +46,26 @@ export function target ( target ) { export function transform ( source, options = {} ) { let ast;+ let jsx = null; try { ast = parse( source, { ecmaVersion: 7, preserveParens: true, sourceType: 'module',+ onComment: ( block, text, start, end ) => {+ if ( !jsx ) {+ let match = /@jsx\s+([^\s]+)/.exec( text );+ if ( match ) jsx = match[1];+ }+ }, plugins: { jsx: true, objectSpread: true } });++ options.jsx = jsx || options.jsx; } catch ( err ) { err.snippet = getSnippet( source, err.loc ); err.toString = () => `${err.name}: ${err.message}\n${err.snippet}`;