diff --git a/AStyleFormat.py b/AStyleFormat.py index 0fa9d67..01f2b75 100644 --- a/AStyleFormat.py +++ b/AStyleFormat.py @@ -197,7 +197,8 @@ def _read_astylerc(self, path): @staticmethod def _join_options(options_list): - return ' '.join(o for o in options_list if o) + return Options.strip_invalid_options_string( + ' '.join(o for o in options_list if o)) def _get_options(self, syntax, formatting_mode): syntax_settings = self._get_syntax_settings(syntax, formatting_mode) diff --git a/AStyleFormatterLib/Options.py b/AStyleFormatterLib/Options.py index a32bcd3..af462a0 100644 --- a/AStyleFormatterLib/Options.py +++ b/AStyleFormatterLib/Options.py @@ -19,6 +19,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +import shlex class ImproperlyConfigured(Exception): @@ -243,3 +244,41 @@ def build_astyle_options(settings, indent_options, convert_tabs=False): value = settings[option_name] options = function(options, option_name, value) return options + + +_BLACK_LIST_MATCH = set([ + '-n', + '--recursive', '-r', '-R', + '--dry-run', '--exclude', + '--ignore-exclude-errors', '-i', + '--ignore-exclude-errors-x', '-xi', + '--errors-to-stdout', '-X', + '--preserve-date', '-Z', + '--verbose', '-v', + '--formatted', '-Q', + '--quiet', '-q', + '--lineend', '-z1', '-z2', '-z3', + '--ascii', '-I' + '--version', '-V', + '--help', '-h', '-?', + '--html', '-!', +]) + +_BLACK_LIST_STARTS_WITH = set([ + '--suffix=', + '--exclude=', +]) + + +def strip_invalid_options_string(options_string): + options = shlex.split(options_string) + result = [] + for option in options: + if option in _BLACK_LIST_MATCH: + continue + if '=' in option: + for item in _BLACK_LIST_STARTS_WITH: + if option.startswith(item): + continue + result.append(option) + return ' '.join(result)