Add C++11 support to ranges.h
Re-enable ranges-test Fix a Visual Studio error about function not returning a value in printf.h Fix a bug in .travis.yml
This commit is contained in:
parent
d1976cfb65
commit
d79b096cc0
@ -1,103 +0,0 @@
|
|||||||
# The default ``config.py``
|
|
||||||
# flake8: noqa
|
|
||||||
|
|
||||||
|
|
||||||
def set_prefs(prefs):
|
|
||||||
"""This function is called before opening the project"""
|
|
||||||
|
|
||||||
# Specify which files and folders to ignore in the project.
|
|
||||||
# Changes to ignored resources are not added to the history and
|
|
||||||
# VCSs. Also they are not returned in `Project.get_files()`.
|
|
||||||
# Note that ``?`` and ``*`` match all characters but slashes.
|
|
||||||
# '*.pyc': matches 'test.pyc' and 'pkg/test.pyc'
|
|
||||||
# 'mod*.pyc': matches 'test/mod1.pyc' but not 'mod/1.pyc'
|
|
||||||
# '.svn': matches 'pkg/.svn' and all of its children
|
|
||||||
# 'build/*.o': matches 'build/lib.o' but not 'build/sub/lib.o'
|
|
||||||
# 'build//*.o': matches 'build/lib.o' and 'build/sub/lib.o'
|
|
||||||
prefs['ignored_resources'] = [
|
|
||||||
'*.pyc', '*~', '.ropeproject', '.hg', '.svn', '_svn',
|
|
||||||
'.git', '.tox', '.env', 'env', 'venv', 'node_modules',
|
|
||||||
'bower_components'
|
|
||||||
]
|
|
||||||
|
|
||||||
# Specifies which files should be considered python files. It is
|
|
||||||
# useful when you have scripts inside your project. Only files
|
|
||||||
# ending with ``.py`` are considered to be python files by
|
|
||||||
# default.
|
|
||||||
#prefs['python_files'] = ['*.py']
|
|
||||||
|
|
||||||
# Custom source folders: By default rope searches the project
|
|
||||||
# for finding source folders (folders that should be searched
|
|
||||||
# for finding modules). You can add paths to that list. Note
|
|
||||||
# that rope guesses project source folders correctly most of the
|
|
||||||
# time; use this if you have any problems.
|
|
||||||
# The folders should be relative to project root and use '/' for
|
|
||||||
# separating folders regardless of the platform rope is running on.
|
|
||||||
# 'src/my_source_folder' for instance.
|
|
||||||
#prefs.add('source_folders', 'src')
|
|
||||||
|
|
||||||
# You can extend python path for looking up modules
|
|
||||||
#prefs.add('python_path', '~/python/')
|
|
||||||
|
|
||||||
# Should rope save object information or not.
|
|
||||||
prefs['save_objectdb'] = True
|
|
||||||
prefs['compress_objectdb'] = False
|
|
||||||
|
|
||||||
# If `True`, rope analyzes each module when it is being saved.
|
|
||||||
prefs['automatic_soa'] = True
|
|
||||||
# The depth of calls to follow in static object analysis
|
|
||||||
prefs['soa_followed_calls'] = 0
|
|
||||||
|
|
||||||
# If `False` when running modules or unit tests "dynamic object
|
|
||||||
# analysis" is turned off. This makes them much faster.
|
|
||||||
prefs['perform_doa'] = True
|
|
||||||
|
|
||||||
# Rope can check the validity of its object DB when running.
|
|
||||||
prefs['validate_objectdb'] = True
|
|
||||||
|
|
||||||
# How many undos to hold?
|
|
||||||
prefs['max_history_items'] = 32
|
|
||||||
|
|
||||||
# Shows whether to save history across sessions.
|
|
||||||
prefs['save_history'] = True
|
|
||||||
prefs['compress_history'] = False
|
|
||||||
|
|
||||||
# Set the number spaces used for indenting. According to
|
|
||||||
# :PEP:`8`, it is best to use 4 spaces. Since most of rope's
|
|
||||||
# unit-tests use 4 spaces it is more reliable, too.
|
|
||||||
prefs['indent_size'] = 4
|
|
||||||
|
|
||||||
# Builtin and c-extension modules that are allowed to be imported
|
|
||||||
# and inspected by rope.
|
|
||||||
prefs['extension_modules'] = []
|
|
||||||
|
|
||||||
# Add all standard c-extensions to extension_modules list.
|
|
||||||
prefs['import_dynload_stdmods'] = True
|
|
||||||
|
|
||||||
# If `True` modules with syntax errors are considered to be empty.
|
|
||||||
# The default value is `False`; When `False` syntax errors raise
|
|
||||||
# `rope.base.exceptions.ModuleSyntaxError` exception.
|
|
||||||
prefs['ignore_syntax_errors'] = False
|
|
||||||
|
|
||||||
# If `True`, rope ignores unresolvable imports. Otherwise, they
|
|
||||||
# appear in the importing namespace.
|
|
||||||
prefs['ignore_bad_imports'] = False
|
|
||||||
|
|
||||||
# If `True`, rope will insert new module imports as
|
|
||||||
# `from <package> import <module>` by default.
|
|
||||||
prefs['prefer_module_from_imports'] = False
|
|
||||||
|
|
||||||
# If `True`, rope will transform a comma list of imports into
|
|
||||||
# multiple separate import statements when organizing
|
|
||||||
# imports.
|
|
||||||
prefs['split_imports'] = False
|
|
||||||
|
|
||||||
# If `True`, rope will sort imports alphabetically by module name
|
|
||||||
# instead of alphabetically by import statement, with from imports
|
|
||||||
# after normal imports.
|
|
||||||
prefs['sort_imports_alphabetically'] = False
|
|
||||||
|
|
||||||
|
|
||||||
def project_opened(project):
|
|
||||||
"""This function is called after opening the project"""
|
|
||||||
# Do whatever you like here!
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
15
.travis.yml
15
.travis.yml
@ -21,7 +21,7 @@ matrix:
|
|||||||
- env: BUILD=Doc
|
- env: BUILD=Doc
|
||||||
sudo: required
|
sudo: required
|
||||||
# g++ 6 on Linux with C++14
|
# g++ 6 on Linux with C++14
|
||||||
- env: CXX=g++-6 BUILD=Debug STANDARD=14
|
- env: COMPILER=g++-6 BUILD=Debug STANDARD=14
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
@ -30,7 +30,7 @@ matrix:
|
|||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
packages:
|
packages:
|
||||||
- g++-6
|
- g++-6
|
||||||
- env: CXX=g++-6 BUILD=Release STANDARD=14
|
- env: COMPILER=g++-6 BUILD=Release STANDARD=14
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
@ -47,7 +47,7 @@ matrix:
|
|||||||
compiler: clang
|
compiler: clang
|
||||||
os: osx
|
os: osx
|
||||||
# clang 6.0 on Linux with C++14
|
# clang 6.0 on Linux with C++14
|
||||||
- env: CXX=clang++-6.0 BUILD=Debug STANDARD=14
|
- env: COMPILER=clang++-6.0 BUILD=Debug STANDARD=14
|
||||||
compiler: clang
|
compiler: clang
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
@ -59,7 +59,7 @@ matrix:
|
|||||||
- llvm-toolchain-trusty
|
- llvm-toolchain-trusty
|
||||||
- llvm-toolchain-trusty-6.0
|
- llvm-toolchain-trusty-6.0
|
||||||
# clang 4.0 on Linux with C++14
|
# clang 4.0 on Linux with C++14
|
||||||
- env: CXX=clang++-4.0 BUILD=Debug STANDARD=11
|
- env: COMPILER=clang++-4.0 BUILD=Debug STANDARD=11
|
||||||
compiler: clang
|
compiler: clang
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
@ -71,10 +71,10 @@ matrix:
|
|||||||
- llvm-toolchain-trusty
|
- llvm-toolchain-trusty
|
||||||
- llvm-toolchain-trusty-4.0
|
- llvm-toolchain-trusty-4.0
|
||||||
# g++ 4.8 on Linux with C++11
|
# g++ 4.8 on Linux with C++11
|
||||||
- env: CXX=g++-4.8 BUILD=Debug STANDARD=11
|
- env: COMPILER=g++-4.8 BUILD=Debug STANDARD=11
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
# g++ 4.4 on Linux with C++11
|
# g++ 4.4 on Linux with C++11
|
||||||
- env: CXX=g++-4.4 BUILD=Debug STANDARD=11
|
- env: COMPILER=g++-4.4 BUILD=Debug STANDARD=11
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
@ -118,10 +118,11 @@ matrix:
|
|||||||
- tree ./libs
|
- tree ./libs
|
||||||
allow_failures:
|
allow_failures:
|
||||||
# Errors
|
# Errors
|
||||||
- env: CXX=g++-4.4 BUILD=Debug STANDARD=11
|
- env: COMPILER=g++-4.4 BUILD=Debug STANDARD=11
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
|
- if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then export CXX=${COMPILER}; fi
|
||||||
- if [[ "${BUILD}" != "Doc" ]]; then ${CXX} --version; fi
|
- if [[ "${BUILD}" != "Doc" ]]; then ${CXX} --version; fi
|
||||||
|
|
||||||
script:
|
script:
|
||||||
|
|||||||
@ -2919,7 +2919,7 @@ void basic_writer<Range>::write_double(T value, const format_specs &spec) {
|
|||||||
typedef back_insert_range<internal::basic_buffer<char_type>> range;
|
typedef back_insert_range<internal::basic_buffer<char_type>> range;
|
||||||
basic_writer<range> w{range(buffer)};
|
basic_writer<range> w{range(buffer)};
|
||||||
w.write(hi);
|
w.write(hi);
|
||||||
unsigned digits = buffer.size();
|
size_t digits = buffer.size();
|
||||||
w.write('.');
|
w.write('.');
|
||||||
const unsigned max_digits = 18;
|
const unsigned max_digits = 18;
|
||||||
while (digits++ < max_digits) {
|
while (digits++ < max_digits) {
|
||||||
|
|||||||
@ -52,6 +52,7 @@ class printf_precision_handler: public function<int> {
|
|||||||
typename std::enable_if<!std::is_integral<T>::value, int>::type
|
typename std::enable_if<!std::is_integral<T>::value, int>::type
|
||||||
operator()(T) {
|
operator()(T) {
|
||||||
FMT_THROW(format_error("precision is not integer"));
|
FMT_THROW(format_error("precision is not integer"));
|
||||||
|
return 0; // Silence visual studio
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -193,6 +194,7 @@ class printf_width_handler: public function<unsigned> {
|
|||||||
typename std::enable_if<!std::is_integral<T>::value, unsigned>::type
|
typename std::enable_if<!std::is_integral<T>::value, unsigned>::type
|
||||||
operator()(T) {
|
operator()(T) {
|
||||||
FMT_THROW(format_error("width is not integer"));
|
FMT_THROW(format_error("width is not integer"));
|
||||||
|
return 0; // Silence Visual Studio
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
|||||||
@ -126,10 +126,9 @@ struct is_tuple_like {
|
|||||||
static FMT_CONSTEXPR_DECL const bool value =
|
static FMT_CONSTEXPR_DECL const bool value =
|
||||||
is_tuple_like_<T>::value && !is_range_<T>::value;
|
is_tuple_like_<T>::value && !is_range_<T>::value;
|
||||||
};
|
};
|
||||||
} // namespace internal
|
|
||||||
|
|
||||||
// Check for integer_sequence
|
// Check for integer_sequence
|
||||||
#if defined(__cpp_lib_integer_sequence) || FMT_MSC_VER >= 1910
|
#if defined(__cpp_lib_integer_sequence) || FMT_MSC_VER >= 1900
|
||||||
template <typename T, T... N>
|
template <typename T, T... N>
|
||||||
using integer_sequence = std::integer_sequence<T, N...>;
|
using integer_sequence = std::integer_sequence<T, N...>;
|
||||||
template <std::size_t... N>
|
template <std::size_t... N>
|
||||||
@ -179,21 +178,13 @@ void for_each(Tuple &&tup, F &&f) {
|
|||||||
|
|
||||||
template <typename TupleT, typename Char>
|
template <typename TupleT, typename Char>
|
||||||
struct formatter<TupleT, Char,
|
struct formatter<TupleT, Char,
|
||||||
typename std::enable_if<fmt::internal::is_tuple_like<TupleT>::value>::type> {
|
typename std::enable_if<internal::is_tuple_like<TupleT>::value>::type> {
|
||||||
|
private:
|
||||||
fmt::formatting_tuple<Char> formatting;
|
// C++11 generic lambda for format()
|
||||||
|
template <typename FormatContext>
|
||||||
template <typename ParseContext>
|
struct format_each {
|
||||||
FMT_CONSTEXPR auto parse(ParseContext &ctx) -> decltype(ctx.begin()) {
|
template <typename T>
|
||||||
return formatting.parse(ctx);
|
void operator()(const T& v) {
|
||||||
}
|
|
||||||
|
|
||||||
template <typename FormatContext = format_context>
|
|
||||||
auto format(const TupleT &values, FormatContext &ctx) -> decltype(ctx.out()) {
|
|
||||||
auto out = ctx.out();
|
|
||||||
std::size_t i = 0;
|
|
||||||
internal::copy(formatting.prefix, out);
|
|
||||||
internal::for_each(values, [&](const auto &v) {
|
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
if (formatting.add_prepostfix_space) {
|
if (formatting.add_prepostfix_space) {
|
||||||
*out++ = ' ';
|
*out++ = ' ';
|
||||||
@ -206,7 +197,28 @@ struct formatter<TupleT, Char,
|
|||||||
format_to(out, "{}", v);
|
format_to(out, "{}", v);
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
});
|
}
|
||||||
|
|
||||||
|
formatting_tuple<Char>& formatting;
|
||||||
|
std::size_t& i;
|
||||||
|
typename std::add_lvalue_reference<decltype(std::declval<FormatContext>().out())>::type out;
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
formatting_tuple<Char> formatting;
|
||||||
|
|
||||||
|
template <typename ParseContext>
|
||||||
|
FMT_CONSTEXPR auto parse(ParseContext &ctx) -> decltype(ctx.begin()) {
|
||||||
|
return formatting.parse(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename FormatContext = format_context>
|
||||||
|
auto format(const TupleT &values, FormatContext &ctx) -> decltype(ctx.out()) {
|
||||||
|
auto out = ctx.out();
|
||||||
|
std::size_t i = 0;
|
||||||
|
internal::copy(formatting.prefix, out);
|
||||||
|
|
||||||
|
internal::for_each(values, format_each<FormatContext>{formatting, i, out});
|
||||||
if (formatting.add_prepostfix_space) {
|
if (formatting.add_prepostfix_space) {
|
||||||
*out++ = ' ';
|
*out++ = ' ';
|
||||||
}
|
}
|
||||||
@ -215,13 +227,12 @@ struct formatter<TupleT, Char,
|
|||||||
return ctx.out();
|
return ctx.out();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#endif // FMT_USE_INTEGER_SEQUENCE
|
|
||||||
|
|
||||||
template <typename RangeT, typename Char>
|
template <typename RangeT, typename Char>
|
||||||
struct formatter< RangeT, Char,
|
struct formatter<RangeT, Char,
|
||||||
typename std::enable_if<fmt::internal::is_range<RangeT>::value>::type> {
|
typename std::enable_if<internal::is_range<RangeT>::value>::type> {
|
||||||
|
|
||||||
fmt::formatting_range<Char> formatting;
|
formatting_range<Char> formatting;
|
||||||
|
|
||||||
template <typename ParseContext>
|
template <typename ParseContext>
|
||||||
FMT_CONSTEXPR auto parse(ParseContext &ctx) -> decltype(ctx.begin()) {
|
FMT_CONSTEXPR auto parse(ParseContext &ctx) -> decltype(ctx.begin()) {
|
||||||
|
|||||||
@ -93,7 +93,7 @@ add_fmt_test(printf-test)
|
|||||||
add_fmt_test(time-test)
|
add_fmt_test(time-test)
|
||||||
add_fmt_test(util-test mock-allocator.h)
|
add_fmt_test(util-test mock-allocator.h)
|
||||||
add_fmt_test(custom-formatter-test)
|
add_fmt_test(custom-formatter-test)
|
||||||
#add_fmt_test(ranges-test)
|
add_fmt_test(ranges-test)
|
||||||
|
|
||||||
if (HAVE_OPEN)
|
if (HAVE_OPEN)
|
||||||
add_fmt_executable(posix-mock-test
|
add_fmt_executable(posix-mock-test
|
||||||
|
|||||||
@ -30,7 +30,6 @@ TEST(RangesTest, FormatVector2) {
|
|||||||
EXPECT_EQ("{{1, 2}, {3, 5}, {7, 11}}", ivf);
|
EXPECT_EQ("{{1, 2}, {3, 5}, {7, 11}}", ivf);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if FMT_USE_INTEGER_SEQUENCE
|
|
||||||
TEST(RangesTest, FormatMap) {
|
TEST(RangesTest, FormatMap) {
|
||||||
std::map<std::string, int32_t> simap{{"one", 1}, {"two", 2}};
|
std::map<std::string, int32_t> simap{{"one", 1}, {"two", 2}};
|
||||||
EXPECT_EQ("{(one, 1), (two, 2)}", fmt::format("{}", simap));
|
EXPECT_EQ("{(one, 1), (two, 2)}", fmt::format("{}", simap));
|
||||||
@ -87,4 +86,3 @@ TEST(RangesTest, FormatStruct) {
|
|||||||
|
|
||||||
#endif // (__cplusplus > 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >
|
#endif // (__cplusplus > 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >
|
||||||
// 201402L && _MSC_VER >= 1910)
|
// 201402L && _MSC_VER >= 1910)
|
||||||
#endif // FMT_USE_INTEGER_SEQUENCE
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user