aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mparser.py
AgeCommit message (Collapse)AuthorFilesLines
2021-03-10Add support for basic format stringsLaurin-Luis Lehning1-2/+13
2021-03-04mass rewrite of string formatting to use f-strings everywhereEli Schwartz1-6/+6
performed by running "pyupgrade --py36-plus" and committing the results
2020-09-08typing: fix code reviewDaniel Mensinger1-1/+1
2020-09-08typing: fully annotate mparser.pyDaniel Mensinger1-14/+25
2020-05-23ast: Add AST JSON printerDaniel Mensinger1-7/+5
2020-04-04mparser: fix precedence of arithmetic operatorsAndrei Alexeyev1-27/+33
The arithmetic operators are now split into two groups: * The add/sub group: +, - * The mul/div group: *, /, % All operators within the same group are left-associative and have equal precedence. The mul/div group has a higher precedence than the add/sub group, as one would expect. Previously every operator had a different precedence and was right-associative, which resulted in surprising behavior. This is a potentially breaking change for projects that relied on the old incorrect behavior. Fixes #6870
2020-03-02types: Remove redundant __init__() -> None annotationDaniel Mensinger1-26/+26
2020-03-02types: Use import typing as TDaniel Mensinger1-20/+19
2020-03-02review: Initial fixupDaniel Mensinger1-28/+31
2020-03-02types: Annotate the AST visitorsDaniel Mensinger1-0/+5
2020-03-02types: Annotate mparser.pyDaniel Mensinger1-233/+219
This also fixes that the keys in ArgumentNode.kwargs are all of the type BaseNode now. Before this commit, it was possible that both strings and Nodes where used as keys.
2020-02-28Rename 'subdir' -> 'filename' in location objectsJon Turney1-35/+35
2019-12-05lgtm: Fix redundant codeDaniel Mensinger1-1/+0
2019-12-04dict: Fully evaluate keysXavier Claessens1-13/+1
The only restriction is keys must be string after evaluation. This fix various inconsistencies.
2019-12-03mparser.py: actually check the type of key variable, not its valueMarc Herbert1-1/+1
Fixes PR #6166 and more specifically commit 4e460f04f3b2 that tried to make sure the type of a key variable is a string but checked the type of the value instead. Extends test common/228's limited coverage, its only test case had (surprise) a string value. Also avoid reserved python keyword 'dict' and potentially confusing string 'key'. Implements #5231 for real.
2019-11-12Fixed issue that the key's value type wasn't checked correctly.fchin1-3/+4
Added two new failing tests.
2019-11-12Adding dictionary entry using string variable as key.franczc1-8/+12
2019-04-29Fix flake8-bugbear warningsDaniel Mensinger1-1/+1
2019-04-28consistent invalid escape sequence behaviourJon Turney1-6/+6
* docs: document unrecognized escape sequence behaviour [skip ci] Document that unrecognized escape sequence behaviour is like python, not C. * Don't try to decode invalid hex escape sequences Don't try to decode escape sequences which should contain a sequence of hex digits, but don't, throwing a python exception. These will treated literally instead. * Extend test case to cover invalid escape sequences
2019-03-03rewriter: Use mparser to detect the end of some nodesDaniel Mensinger1-6/+12
2019-03-02Fix ternary in thing (#5007)Dylan Baker1-2/+3
* tests: extend ternary test to cover bugs See issues #5003, #3690, and #2404 * mparser: store subdir in ternary node Ternaries don't really need subdirs, but they can be passed into functions that expect the type they're provided to have a subdir. Provide it to fulful the interface. Fixes #5003 Fixes #3690 Fixes #2404
2019-02-16Fixed flake8Daniel Mensinger1-1/+1
2019-02-16Can now find the assignment node of a valueDaniel Mensinger1-4/+6
2019-01-29pep8 py37Michael Hirsch, Ph.D1-1/+1
2019-01-22Fixed line and column numbers for dict and array nodesDaniel Mensinger1-8/+8
2019-01-22Basic AST visitor patternDaniel Mensinger1-21/+29
2019-01-05parser: Fix line continuation outside of (), [] or {}Xavier Claessens1-1/+5
The documentation states: "In other cases you can get multi-line statements by ending the line with a \." but that seems to never have worked. Closes: #4720
2018-10-04Interpreter: Add 'continue' and 'break' keywordsXavier Claessens1-2/+12
Closes: #3601
2018-10-04Interpreter: Add "in" and "not in" operatorsXavier Claessens1-3/+8
Closes: #3600
2018-07-27Warn for future keyword (#3908)Xavier Claessens1-0/+5
2018-05-23Add support for octal and binary int literals.Filipe Brandenburger1-6/+2
Simplify support for alternate bases using int(..., base=0) which auto-detects it using the standard Python syntax for numbers. Octal numbers are useful to specify permission bits and umasks. Binary numbers are not super useful... But considering we get them for free, let's allow them here too. v2: Tweak the regex so it doesn't accept a decimal number with a leading zero, which is invalid for int(..., base=0) and would raise a ValueError if passed around.
2018-05-21dict: fix CI issuesMathieu Duponchelle1-1/+1
2018-05-20dict: address review commentsMathieu Duponchelle1-8/+9
2018-05-20Add new built-in type, dictMathieu Duponchelle1-4/+53
For now dicts are immutable, and do not expose any methods, they however support "native" syntax such as [] lookup, and foreach iterating, and can be printed.
2018-04-21Remove escaping for triple-quoted stringsNiklas Claesson1-16/+0
Fixes #3429
2018-04-17Exit meson with an error if an invalid escape sequence is found in aNiklas Claesson1-3/+17
string
2018-04-17Complete python escape sequences aware stringsTim 'mithro' Ansell1-4/+30
Fixes #3169
2018-02-21Newlines in single line strings should only be a warning for now.Jussi Pakkanen1-1/+2
2018-02-20Fail if singleline string has multiple linesCaio Marcelo de Oliveira Filho1-0/+3
2018-02-05Add support for hex int literals.Jussi Pakkanen1-0/+4
2018-01-30Report warning/error locations in a format IDEs may already know how to parseJon Turney1-1/+1
Examples: meson.build:2:0: ERROR: Dependency is both required and not-found meson.build:4: WARNING: Keyword argument "link_with" defined multiple times. These are already matched by the default compilation-error-regexp-alist in emacs. Also: Don't start 'red' markup until after the \n before an error Unabsorb full-stop at end of warning with location from mlog.warning() Update warning_location test
2018-01-01Consolidate warning location formatting in mlog.warning()Jon Turney1-2/+3
Also use .format() rather than % Also use build.environment rather than hardcoding 'meson.build'
2017-12-30Add filename and lineno to duplicate kwargs warningJon Turney1-2/+2
Fixes #1626 Also fix 'a an error' typo
2017-11-27Fix escaping of newlines in string literalsJoergen Ibsen1-4/+4
Replace '\n' escape sequence before '\\' to allow a literal backslash to be inserted before the character 'n'. Fixes #2682
2017-06-25Do not permit invalid and/or nodes to be declared. Closes #1886.Jussi Pakkanen1-0/+7
2017-04-21Added missing argument to a few function calls. Closes #1647.Jussi Pakkanen1-8/+11
2017-04-19Print a warning on duplicated keywords.Jussi Pakkanen1-0/+3
2017-04-07Don't crash if a meson.build file is empty (#1570)Aaron Plattner1-0/+1
* Don't crash if a meson.build file is empty Commit 9adef3a8e878 caused an empty meson.build file to generate a traceback: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/mesonbuild/mparser.py", line 415, in getsym self.current = next(self.stream) StopIteration During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/mesonbuild/mesonmain.py", line 298, in run app.generate() File "/usr/lib/python3.6/site-packages/mesonbuild/mesonmain.py", line 180, in generate intr.run() File "/usr/lib/python3.6/site-packages/mesonbuild/interpreter.py", line 2529, in run super().run() File "/usr/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 125, in run self.evaluate_codeblock(self.ast, start=1) File "/usr/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 146, in evaluate_codeblock raise e File "/usr/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 140, in evaluate_codeblock self.evaluate_statement(cur) File "/usr/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 151, in evaluate_statement return self.function_call(cur) File "/usr/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 372, in function_call return self.funcs[func_name](node, self.flatten(posargs), kwargs) File "/usr/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 47, in wrapped return f(self, node, args, kwargs) File "/usr/lib/python3.6/site-packages/mesonbuild/interpreter.py", line 2237, in func_subdir self.evaluate_codeblock(codeblock) File "/usr/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 146, in evaluate_codeblock raise e File "/usr/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 140, in evaluate_codeblock self.evaluate_statement(cur) File "/usr/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 151, in evaluate_statement return self.function_call(cur) File "/usr/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 372, in function_call return self.funcs[func_name](node, self.flatten(posargs), kwargs) File "/usr/lib/python3.6/site-packages/mesonbuild/interpreterbase.py", line 47, in wrapped return f(self, node, args, kwargs) File "/usr/lib/python3.6/site-packages/mesonbuild/interpreter.py", line 2233, in func_subdir codeblock = mparser.Parser(code, self.subdir).parse() File "/usr/lib/python3.6/site-packages/mesonbuild/mparser.py", line 410, in __init__ self.getsym() File "/usr/lib/python3.6/site-packages/mesonbuild/mparser.py", line 417, in getsym self.current = Token('eof', '', self.current.line_start, self.current.lineno, self.current.colno + self.current.bytespan[1] - self.current.bytespan[0], (0, 0), None) AttributeError: 'Parser' object has no attribute 'current'
2017-03-25EmptyNode needs a line/column number too. There are times its lineAaron Small1-25/+65
and column are printed out by other parser code. Add a print of the line with the error, and where on the line the error occurred. Add a print of where the block scope started, if the error is due to missing the block scope end token.
2017-03-23fix logic operationsNicolas Schneider1-4/+5
Closes #1479.