forked from VimPlug/jedi
move parsing.PushBackIterator and parsing.indent_block to common
This commit is contained in:
@@ -37,6 +37,7 @@ import debug
|
|||||||
import settings
|
import settings
|
||||||
import keywords
|
import keywords
|
||||||
import helpers
|
import helpers
|
||||||
|
import common
|
||||||
import builtin
|
import builtin
|
||||||
import api_classes
|
import api_classes
|
||||||
|
|
||||||
@@ -401,7 +402,7 @@ class Script(object):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
debug.speed('func_call user_stmt')
|
debug.speed('func_call user_stmt')
|
||||||
with helpers.scale_speed_settings(settings.scale_get_in_function_call):
|
with common.scale_speed_settings(settings.scale_get_in_function_call):
|
||||||
origins = evaluate.follow_call(call)
|
origins = evaluate.follow_call(call)
|
||||||
debug.speed('func_call followed')
|
debug.speed('func_call followed')
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ if is_py3k:
|
|||||||
import types
|
import types
|
||||||
import inspect
|
import inspect
|
||||||
|
|
||||||
|
import common
|
||||||
import debug
|
import debug
|
||||||
import parsing
|
import parsing
|
||||||
import imports
|
import imports
|
||||||
@@ -222,7 +223,7 @@ def _generate_code(scope, mixin_funcs={}, depth=0):
|
|||||||
if doc:
|
if doc:
|
||||||
doc = ('r"""\n%s\n"""\n' % doc)
|
doc = ('r"""\n%s\n"""\n' % doc)
|
||||||
if indent:
|
if indent:
|
||||||
doc = parsing.indent_block(doc)
|
doc = common.indent_block(doc)
|
||||||
return doc
|
return doc
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
@@ -303,7 +304,7 @@ def _generate_code(scope, mixin_funcs={}, depth=0):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
mixin = {}
|
mixin = {}
|
||||||
cl_code = _generate_code(cl, mixin, depth + 1)
|
cl_code = _generate_code(cl, mixin, depth + 1)
|
||||||
code += parsing.indent_block(cl_code)
|
code += common.indent_block(cl_code)
|
||||||
code += '\n'
|
code += '\n'
|
||||||
|
|
||||||
# functions
|
# functions
|
||||||
@@ -318,7 +319,7 @@ def _generate_code(scope, mixin_funcs={}, depth=0):
|
|||||||
# normal code generation
|
# normal code generation
|
||||||
code += 'def %s(%s):\n' % (name, params)
|
code += 'def %s(%s):\n' % (name, params)
|
||||||
code += doc_str
|
code += doc_str
|
||||||
code += parsing.indent_block('%s\n\n' % ret)
|
code += common.indent_block('%s\n\n' % ret)
|
||||||
else:
|
else:
|
||||||
# generation of code with mixins
|
# generation of code with mixins
|
||||||
# the parser only supports basic functions with a newline after
|
# the parser only supports basic functions with a newline after
|
||||||
@@ -336,7 +337,7 @@ def _generate_code(scope, mixin_funcs={}, depth=0):
|
|||||||
continue
|
continue
|
||||||
ret = 'pass'
|
ret = 'pass'
|
||||||
code += '@property\ndef %s(self):\n' % (name)
|
code += '@property\ndef %s(self):\n' % (name)
|
||||||
code += parsing.indent_block(get_doc(func) + '%s\n\n' % ret)
|
code += common.indent_block(get_doc(func) + '%s\n\n' % ret)
|
||||||
|
|
||||||
# variables
|
# variables
|
||||||
for name, value in stmts.items():
|
for name, value in stmts.items():
|
||||||
|
|||||||
47
jedi/common.py
Normal file
47
jedi/common.py
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
""" A universal module with functions / classes without dependencies. """
|
||||||
|
import contextlib
|
||||||
|
|
||||||
|
import settings
|
||||||
|
|
||||||
|
|
||||||
|
class PushBackIterator(object):
|
||||||
|
def __init__(self, iterator):
|
||||||
|
self.pushes = []
|
||||||
|
self.iterator = iterator
|
||||||
|
|
||||||
|
def push_back(self, value):
|
||||||
|
self.pushes.append(value)
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def next(self):
|
||||||
|
""" Python 2 Compatibility """
|
||||||
|
return self.__next__()
|
||||||
|
|
||||||
|
def __next__(self):
|
||||||
|
if self.pushes:
|
||||||
|
return self.pushes.pop()
|
||||||
|
else:
|
||||||
|
return next(self.iterator)
|
||||||
|
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def scale_speed_settings(factor):
|
||||||
|
a = settings.max_executions
|
||||||
|
b = settings.max_until_execution_unique
|
||||||
|
settings.max_executions *= factor
|
||||||
|
settings.max_until_execution_unique *= factor
|
||||||
|
yield
|
||||||
|
settings.max_executions = a
|
||||||
|
settings.max_until_execution_unique = b
|
||||||
|
|
||||||
|
|
||||||
|
def indent_block(text, indention=' '):
|
||||||
|
""" This function indents a text block with a default of four spaces """
|
||||||
|
temp = ''
|
||||||
|
while text and text[-1] == '\n':
|
||||||
|
temp += text[-1]
|
||||||
|
text = text[:-1]
|
||||||
|
lines = text.split('\n')
|
||||||
|
return '\n'.join(map(lambda s: indention + s, lines)) + temp
|
||||||
@@ -18,6 +18,7 @@ import sys
|
|||||||
import itertools
|
import itertools
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
|
import common
|
||||||
import cache
|
import cache
|
||||||
import parsing
|
import parsing
|
||||||
import debug
|
import debug
|
||||||
@@ -643,7 +644,7 @@ class Execution(Executable):
|
|||||||
else:
|
else:
|
||||||
yield None, var_arg
|
yield None, var_arg
|
||||||
|
|
||||||
return iter(parsing.PushBackIterator(iterate()))
|
return iter(common.PushBackIterator(iterate()))
|
||||||
|
|
||||||
def get_set_vars(self):
|
def get_set_vars(self):
|
||||||
return self.get_defined_names()
|
return self.get_defined_names()
|
||||||
|
|||||||
@@ -254,12 +254,3 @@ def scan_array_for_pos(arr, pos):
|
|||||||
return call, check_arr_index(), stop
|
return call, check_arr_index(), stop
|
||||||
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
|
||||||
def scale_speed_settings(factor):
|
|
||||||
a = settings.max_executions
|
|
||||||
b = settings.max_until_execution_unique
|
|
||||||
settings.max_executions *= factor
|
|
||||||
settings.max_until_execution_unique *= factor
|
|
||||||
yield
|
|
||||||
settings.max_executions = a
|
|
||||||
settings.max_until_execution_unique = b
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import cache
|
|||||||
import parsing
|
import parsing
|
||||||
import builtin
|
import builtin
|
||||||
import debug
|
import debug
|
||||||
import evaluate
|
|
||||||
import settings
|
import settings
|
||||||
import imports
|
import imports
|
||||||
|
|
||||||
|
|||||||
@@ -37,44 +37,13 @@ import keyword
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
import debug
|
import debug
|
||||||
|
import common
|
||||||
|
|
||||||
|
|
||||||
class ParserError(Exception):
|
class ParserError(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def indent_block(text, indention=' '):
|
|
||||||
""" This function indents a text block with a default of four spaces """
|
|
||||||
temp = ''
|
|
||||||
while text and text[-1] == '\n':
|
|
||||||
temp += text[-1]
|
|
||||||
text = text[:-1]
|
|
||||||
lines = text.split('\n')
|
|
||||||
return '\n'.join(map(lambda s: indention + s, lines)) + temp
|
|
||||||
|
|
||||||
|
|
||||||
class PushBackIterator(object):
|
|
||||||
def __init__(self, iterator):
|
|
||||||
self.pushes = []
|
|
||||||
self.iterator = iterator
|
|
||||||
|
|
||||||
def push_back(self, value):
|
|
||||||
self.pushes.append(value)
|
|
||||||
|
|
||||||
def __iter__(self):
|
|
||||||
return self
|
|
||||||
|
|
||||||
def next(self):
|
|
||||||
""" Python 2 Compatibility """
|
|
||||||
return self.__next__()
|
|
||||||
|
|
||||||
def __next__(self):
|
|
||||||
if self.pushes:
|
|
||||||
return self.pushes.pop()
|
|
||||||
else:
|
|
||||||
return next(self.iterator)
|
|
||||||
|
|
||||||
|
|
||||||
class Base(object):
|
class Base(object):
|
||||||
"""
|
"""
|
||||||
This is just here to have an isinstance check, which is also used on
|
This is just here to have an isinstance check, which is also used on
|
||||||
@@ -191,7 +160,7 @@ class Scope(Simple):
|
|||||||
string += stmt.get_code()
|
string += stmt.get_code()
|
||||||
|
|
||||||
if first_indent:
|
if first_indent:
|
||||||
string = indent_block(string, indention=indention)
|
string = common.indent_block(string, indention=indention)
|
||||||
return string
|
return string
|
||||||
|
|
||||||
@Python3Method
|
@Python3Method
|
||||||
@@ -1632,7 +1601,7 @@ class PyFuzzyParser(object):
|
|||||||
debug.warning('indentation error on line %s, ignoring it' %
|
debug.warning('indentation error on line %s, ignoring it' %
|
||||||
(self.start_pos[0]))
|
(self.start_pos[0]))
|
||||||
self._line_of_tokenize_restart = self.start_pos[0] + 1
|
self._line_of_tokenize_restart = self.start_pos[0] + 1
|
||||||
self.gen = PushBackIterator(tokenize.generate_tokens(
|
self.gen = common.PushBackIterator(tokenize.generate_tokens(
|
||||||
self.buf.readline))
|
self.buf.readline))
|
||||||
return self.next()
|
return self.next()
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
@@ -1667,7 +1636,7 @@ class PyFuzzyParser(object):
|
|||||||
:raises: IndentationError
|
:raises: IndentationError
|
||||||
"""
|
"""
|
||||||
self.buf = StringIO(self.code)
|
self.buf = StringIO(self.code)
|
||||||
self.gen = PushBackIterator(tokenize.generate_tokens(
|
self.gen = common.PushBackIterator(tokenize.generate_tokens(
|
||||||
self.buf.readline))
|
self.buf.readline))
|
||||||
|
|
||||||
extended_flow = ['else', 'elif', 'except', 'finally']
|
extended_flow = ['else', 'elif', 'except', 'finally']
|
||||||
|
|||||||
Reference in New Issue
Block a user