aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/3rdparty/optional/CMakeLists.txt11
-rw-r--r--src/libs/3rdparty/optional/LICENSE_1_0.txt23
-rw-r--r--src/libs/3rdparty/optional/README.md39
-rw-r--r--src/libs/3rdparty/optional/copyright.txt10
-rw-r--r--src/libs/3rdparty/optional/optional.hpp1046
-rw-r--r--src/libs/3rdparty/optional/test_optional.cpp1459
-rw-r--r--src/libs/3rdparty/optional/test_type_traits.cpp66
-rw-r--r--src/libs/cplusplus/FindUsages.cpp17
-rw-r--r--src/libs/cplusplus/MatchingText.cpp5
-rw-r--r--src/libs/extensionsystem/pluginmanager.cpp4
-rw-r--r--src/libs/extensionsystem/pluginspec_p.h8
-rw-r--r--src/libs/languageserverprotocol/clientcapabilities.cpp22
-rw-r--r--src/libs/languageserverprotocol/clientcapabilities.h136
-rw-r--r--src/libs/languageserverprotocol/completion.cpp14
-rw-r--r--src/libs/languageserverprotocol/completion.h34
-rw-r--r--src/libs/languageserverprotocol/diagnostics.h2
-rw-r--r--src/libs/languageserverprotocol/initializemessages.cpp24
-rw-r--r--src/libs/languageserverprotocol/initializemessages.h16
-rw-r--r--src/libs/languageserverprotocol/jsonobject.h28
-rw-r--r--src/libs/languageserverprotocol/jsonrpcmessages.h38
-rw-r--r--src/libs/languageserverprotocol/languagefeatures.cpp22
-rw-r--r--src/libs/languageserverprotocol/languagefeatures.h42
-rw-r--r--src/libs/languageserverprotocol/lsptypes.cpp26
-rw-r--r--src/libs/languageserverprotocol/lsptypes.h30
-rw-r--r--src/libs/languageserverprotocol/lsputils.h2
-rw-r--r--src/libs/languageserverprotocol/messages.h2
-rw-r--r--src/libs/languageserverprotocol/progresssupport.h8
-rw-r--r--src/libs/languageserverprotocol/semantictokens.h4
-rw-r--r--src/libs/languageserverprotocol/servercapabilities.cpp121
-rw-r--r--src/libs/languageserverprotocol/servercapabilities.h86
-rw-r--r--src/libs/languageserverprotocol/textsynchronization.h8
-rw-r--r--src/libs/languageserverprotocol/workspace.h8
-rw-r--r--src/libs/sqlite/sqlitealgorithms.h4
-rw-r--r--src/libs/sqlite/sqlitebasestatement.h8
-rw-r--r--src/libs/utils/CMakeLists.txt2
-rw-r--r--src/libs/utils/algorithm.h10
-rw-r--r--src/libs/utils/archive.cpp10
-rw-r--r--src/libs/utils/aspects.cpp10
-rw-r--r--src/libs/utils/aspects.h4
-rw-r--r--src/libs/utils/environment.cpp6
-rw-r--r--src/libs/utils/environment.h4
-rw-r--r--src/libs/utils/environmentdialog.cpp2
-rw-r--r--src/libs/utils/environmentdialog.h2
-rw-r--r--src/libs/utils/fancylineedit.cpp5
-rw-r--r--src/libs/utils/filepath.cpp6
-rw-r--r--src/libs/utils/fsengine/fileiconprovider.cpp8
-rw-r--r--src/libs/utils/hostosinfo.cpp2
-rw-r--r--src/libs/utils/hostosinfo.h5
-rw-r--r--src/libs/utils/layoutbuilder.h5
-rw-r--r--src/libs/utils/linecolumn.h6
-rw-r--r--src/libs/utils/namevaluesdialog.cpp2
-rw-r--r--src/libs/utils/namevaluesdialog.h4
-rw-r--r--src/libs/utils/optional.h77
-rw-r--r--src/libs/utils/outputformatter.cpp2
-rw-r--r--src/libs/utils/outputformatter.h18
-rw-r--r--src/libs/utils/pointeralgorithm.h6
-rw-r--r--src/libs/utils/runextensions.h4
-rw-r--r--src/libs/utils/settingsaccessor.cpp42
-rw-r--r--src/libs/utils/settingsaccessor.h27
-rw-r--r--src/libs/utils/utils.qbs2
60 files changed, 473 insertions, 3171 deletions
diff --git a/src/libs/3rdparty/optional/CMakeLists.txt b/src/libs/3rdparty/optional/CMakeLists.txt
deleted file mode 100644
index 07f38f7993..0000000000
--- a/src/libs/3rdparty/optional/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-project(optional)
-cmake_minimum_required(VERSION 2.8)
-enable_testing()
-
-set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra")
-
-add_executable(test_optional test_optional.cpp)
-add_executable(test_type_traits test_type_traits.cpp)
-
-add_test(test_optional test_optional)
-add_test(test_type_traits test_type_traits)
diff --git a/src/libs/3rdparty/optional/LICENSE_1_0.txt b/src/libs/3rdparty/optional/LICENSE_1_0.txt
deleted file mode 100644
index 36b7cd93cd..0000000000
--- a/src/libs/3rdparty/optional/LICENSE_1_0.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
diff --git a/src/libs/3rdparty/optional/README.md b/src/libs/3rdparty/optional/README.md
deleted file mode 100644
index 948516d1ba..0000000000
--- a/src/libs/3rdparty/optional/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-Optional
-========
-
-A single-header header-only library for representing optional (nullable) objects for C++14 (and C++11 to some extent) and passing them by value. This is the reference implementation of proposal N3793 (see http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3793.html). Optional is now accepted into Library Fundamentals Technical Specification (see http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3848.html). The interface is based on Fernando Cacciola's Boost.Optional library (see http://www.boost.org/doc/libs/1_52_0/libs/optional/doc/html/index.html)
-
-
-Usage
------
-
-```cpp
-optional<int> readInt(); // this function may return int or a not-an-int
-
-if (optional<int> oi = readInt()) // did I get a real int
- cout << "my int is: " << *oi; // use my int
-else
- cout << "I have no int";
-```
-
-For more usage examples and the overview see http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3527.html
-
-
-Supported compilers
--------------------
-
-Clang 3.2, Clang 3.4, G++ 4.7.2, G++ 4.8.1. Tested only with libstdc++, versions 20130531, 20120920, 20110428. Others have reported it also works with libc++.
-
-
-
-Known Issues
-------------
-
- - Currently, the reference (and the only known) implementation of certain pieces of functionality explore what C++11 identifies as undefined behavior (see national body comment FI 15: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3770.html#FI15). This is mostly why Optional was removed from C++14 and put into Library Fundamentals TS. Luckily what the Standard identifies as UB is well defined on all known platforms. We expect that the C++14 wil fix this problem, so that our trick becomes well-defined.
- - In libstdc++ versions below 20130531 the constructor taking `initializer_list` argument is not `constexpr`. This is because `initializer_list` operations are not `constexpr` in C++11. This works however in version 20130531. It is also not enabled for libc++ because I do not have access to it and do nto know if it provides `constexpr` `initializer_list`.
- - In G++ 4.7.2 and 4.8.0 member function `value_or` does not have rvalue reference overload. These compilers do not support rvalue overloding on `*this`.
- - In order for the library to work with slightly older compilers, we emulate some missing type traits. On some platforms we cannot correctly detect the available features, and attempts at workarounds for missing type trait definitions can cause compile-time errors. Define macro `TR2_OPTIONAL_DISABLE_EMULATION_OF_TYPE_TRAITS` if you know that all the necessary type traits are defined, and no emulation is required.
-
-License
--------
-Distributed under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
diff --git a/src/libs/3rdparty/optional/copyright.txt b/src/libs/3rdparty/optional/copyright.txt
deleted file mode 100644
index 1641c3cdd0..0000000000
--- a/src/libs/3rdparty/optional/copyright.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Copyright (C) 2011-2012 Andrzej Krzemienski
-
-Distributed under the Boost Software License, Version 1.0
-(see accompanying file LICENSE_1_0.txt or a copy at
-http://www.boost.org/LICENSE_1_0.txt)
-
-The idea and interface is based on Boost.Optional library
-authored by Fernando Luis Cacciola Carballal
-
-Home at https://github.com/akrzemi1/Optional \ No newline at end of file
diff --git a/src/libs/3rdparty/optional/optional.hpp b/src/libs/3rdparty/optional/optional.hpp
deleted file mode 100644
index 607696d8e1..0000000000
--- a/src/libs/3rdparty/optional/optional.hpp
+++ /dev/null
@@ -1,1046 +0,0 @@
-// Copyright (C) 2011 - 2012 Andrzej Krzemienski.
-//
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-//
-// The idea and interface is based on Boost.Optional library
-// authored by Fernando Luis Cacciola Carballal
-
-# ifndef ___OPTIONAL_HPP___
-# define ___OPTIONAL_HPP___
-
-# include <utility>
-# include <type_traits>
-# include <initializer_list>
-# include <cassert>
-# include <functional>
-# include <string>
-# include <stdexcept>
-
-# define TR2_OPTIONAL_REQUIRES(...) typename enable_if<__VA_ARGS__::value, bool>::type = false
-
-# if defined __GNUC__ // NOTE: GNUC is also defined for Clang
-# if (__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)
-# define TR2_OPTIONAL_GCC_4_8_AND_HIGHER___
-# elif (__GNUC__ > 4)
-# define TR2_OPTIONAL_GCC_4_8_AND_HIGHER___
-# endif
-#
-# if (__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)
-# define TR2_OPTIONAL_GCC_4_7_AND_HIGHER___
-# elif (__GNUC__ > 4)
-# define TR2_OPTIONAL_GCC_4_7_AND_HIGHER___
-# endif
-#
-# if (__GNUC__ == 4) && (__GNUC_MINOR__ == 8) && (__GNUC_PATCHLEVEL__ >= 1)
-# define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
-# elif (__GNUC__ == 4) && (__GNUC_MINOR__ >= 9)
-# define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
-# elif (__GNUC__ > 4)
-# define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
-# endif
-# endif
-#
-# if defined __clang_major__
-# if (__clang_major__ == 3 && __clang_minor__ >= 5)
-# define TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_
-# elif (__clang_major__ > 3)
-# define TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_
-# endif
-# if defined TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_
-# define TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_
-# elif (__clang_major__ == 3 && __clang_minor__ == 4 && __clang_patchlevel__ >= 2)
-# define TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_
-# endif
-# endif
-#
-# if defined _MSC_VER
-# if (_MSC_VER >= 1900)
-# define TR2_OPTIONAL_MSVC_2015_AND_HIGHER___
-# endif
-# endif
-
-# if defined __clang__
-# if (__clang_major__ > 2) || (__clang_major__ == 2) && (__clang_minor__ >= 9)
-# define OPTIONAL_HAS_THIS_RVALUE_REFS 1
-# else
-# define OPTIONAL_HAS_THIS_RVALUE_REFS 0
-# endif
-# elif defined TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
-# define OPTIONAL_HAS_THIS_RVALUE_REFS 1
-# elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___
-# define OPTIONAL_HAS_THIS_RVALUE_REFS 1
-# else
-# define OPTIONAL_HAS_THIS_RVALUE_REFS 0
-# endif
-
-
-# if defined TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
-# define OPTIONAL_HAS_CONSTEXPR_INIT_LIST 1
-# define OPTIONAL_CONSTEXPR_INIT_LIST constexpr
-# else
-# define OPTIONAL_HAS_CONSTEXPR_INIT_LIST 0
-# define OPTIONAL_CONSTEXPR_INIT_LIST
-# endif
-
-# if defined TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_ && (defined __cplusplus) && (__cplusplus != 201103L)
-# define OPTIONAL_HAS_MOVE_ACCESSORS 1
-# else
-# define OPTIONAL_HAS_MOVE_ACCESSORS 0
-# endif
-
-# // In C++11 constexpr implies const, so we need to make non-const members also non-constexpr
-# if (defined __cplusplus) && (__cplusplus == 201103L)
-# define OPTIONAL_MUTABLE_CONSTEXPR
-# else
-# define OPTIONAL_MUTABLE_CONSTEXPR constexpr
-# endif
-
-namespace std{
-
-namespace experimental{
-
-// BEGIN workaround for missing is_trivially_destructible
-# if defined TR2_OPTIONAL_GCC_4_8_AND_HIGHER___
- // leave it: it is already there
-# elif defined TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_
- // leave it: it is already there
-# elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___
- // leave it: it is already there
-# elif defined TR2_OPTIONAL_DISABLE_EMULATION_OF_TYPE_TRAITS
- // leave it: the user doesn't want it
-# else
- template <typename T>
- using is_trivially_destructible = std::has_trivial_destructor<T>;
-# endif
-// END workaround for missing is_trivially_destructible
-
-# if (defined TR2_OPTIONAL_GCC_4_7_AND_HIGHER___)
- // leave it; our metafunctions are already defined.
-# elif defined TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_
- // leave it; our metafunctions are already defined.
-# elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___
- // leave it: it is already there
-# elif defined TR2_OPTIONAL_DISABLE_EMULATION_OF_TYPE_TRAITS
- // leave it: the user doesn't want it
-# else
-
-
-// workaround for missing traits in GCC and CLANG
-template <class T>
-struct is_nothrow_move_constructible
-{
- constexpr static bool value = std::is_nothrow_constructible<T, T&&>::value;
-};
-
-
-template <class T, class U>
-struct is_assignable
-{
- template <class X, class Y>
- constexpr static bool has_assign(...) { return false; }
-
- template <class X, class Y, size_t S = sizeof((std::declval<X>() = std::declval<Y>(), true)) >
- // the comma operator is necessary for the cases where operator= returns void
- constexpr static bool has_assign(bool) { return true; }
-
- constexpr static bool value = has_assign<T, U>(true);
-};
-
-
-template <class T>
-struct is_nothrow_move_assignable
-{
- template <class X, bool has_any_move_assign>
- struct has_nothrow_move_assign {
- constexpr static bool value = false;
- };
-
- template <class X>
- struct has_nothrow_move_assign<X, true> {
- constexpr static bool value = noexcept( std::declval<X&>() = std::declval<X&&>() );
- };
-
- constexpr static bool value = has_nothrow_move_assign<T, is_assignable<T&, T&&>::value>::value;
-};
-// end workaround
-
-
-# endif
-
-
-
-// 20.5.4, optional for object types
-template <class T> class optional;
-
-// 20.5.5, optional for lvalue reference types
-template <class T> class optional<T&>;
-
-
-// workaround: std utility functions aren't constexpr yet
-template <class T> inline constexpr T&& constexpr_forward(typename std::remove_reference<T>::type& t) noexcept
-{
- return static_cast<T&&>(t);
-}
-
-template <class T> inline constexpr T&& constexpr_forward(typename std::remove_reference<T>::type&& t) noexcept
-{
- static_assert(!std::is_lvalue_reference<T>::value, "!!");
- return static_cast<T&&>(t);
-}
-
-template <class T> inline constexpr typename std::remove_reference<T>::type&& constexpr_move(T&& t) noexcept
-{
- return static_cast<typename std::remove_reference<T>::type&&>(t);
-}
-
-
-#if defined NDEBUG
-# define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR) (EXPR)
-#else
-# define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR) ((CHECK) ? (EXPR) : ([]{assert(!#CHECK);}(), (EXPR)))
-#endif
-
-
-namespace detail_
-{
-
-// static_addressof: a constexpr version of addressof
-template <typename T>
-struct has_overloaded_addressof
-{
- template <class X>
- constexpr static bool has_overload(...) { return false; }
-
- template <class X, size_t S = sizeof(std::declval<X&>().operator&()) >
- constexpr static bool has_overload(bool) { return true; }
-
- constexpr static bool value = has_overload<T>(true);
-};
-
-template <typename T, TR2_OPTIONAL_REQUIRES(!has_overloaded_addressof<T>)>
-constexpr T* static_addressof(T& ref)
-{
- return &ref;
-}
-
-template <typename T, TR2_OPTIONAL_REQUIRES(has_overloaded_addressof<T>)>
-T* static_addressof(T& ref)
-{
- return std::addressof(ref);
-}
-
-
-// the call to convert<A>(b) has return type A and converts b to type A iff b decltype(b) is implicitly convertible to A
-template <class U>
-constexpr U convert(U v) { return v; }
-
-} // namespace detail
-
-
-constexpr struct trivial_init_t{} trivial_init{};
-
-
-// 20.5.6, In-place construction
-constexpr struct in_place_t{} in_place{};
-
-
-// 20.5.7, Disengaged state indicator
-struct nullopt_t
-{
- struct init{};
- constexpr explicit nullopt_t(init){}
-};
-constexpr nullopt_t nullopt{nullopt_t::init()};
-
-
-// 20.5.8, class bad_optional_access
-class bad_optional_access : public logic_error {
-public:
- explicit bad_optional_access(const string& what_arg) : logic_error{what_arg} {}
- explicit bad_optional_access(const char* what_arg) : logic_error{what_arg} {}
-};
-
-
-template <class T>
-union storage_t
-{
- unsigned char dummy_;
- T value_;
-
- constexpr storage_t( trivial_init_t ) noexcept : dummy_() {};
-
- template <class... Args>
- constexpr storage_t( Args&&... args ) : value_(constexpr_forward<Args>(args)...) {}
-
- ~storage_t(){}
-};
-
-
-template <class T>
-union constexpr_storage_t
-{
- unsigned char dummy_;
- T value_;
-
- constexpr constexpr_storage_t( trivial_init_t ) noexcept : dummy_() {};
-
- template <class... Args>
- constexpr constexpr_storage_t( Args&&... args ) : value_(constexpr_forward<Args>(args)...) {}
-
- ~constexpr_storage_t() = default;
-};
-
-
-template <class T>
-struct optional_base
-{
- bool init_;
- storage_t<T> storage_;
-
- constexpr optional_base() noexcept : init_(false), storage_(trivial_init) {};
-
- explicit constexpr optional_base(const T& v) : init_(true), storage_(v) {}
-
- explicit constexpr optional_base(T&& v) : init_(true), storage_(constexpr_move(v)) {}
-
- template <class... Args> explicit optional_base(in_place_t, Args&&... args)
- : init_(true), storage_(constexpr_forward<Args>(args)...) {}
-
- template <class U, class... Args, TR2_OPTIONAL_REQUIRES(is_constructible<T, std::initializer_list<U>>)>
- explicit optional_base(in_place_t, std::initializer_list<U> il, Args&&... args)
- : init_(true), storage_(il, std::forward<Args>(args)...) {}
-
- ~optional_base() { if (init_) storage_.value_.T::~T(); }
-};
-
-
-template <class T>
-struct constexpr_optional_base
-{
- bool init_;
- constexpr_storage_t<T> storage_;
-
- constexpr constexpr_optional_base() noexcept : init_(false), storage_(trivial_init) {};
-
- explicit constexpr constexpr_optional_base(const T& v) : init_(true), storage_(v) {}
-
- explicit constexpr constexpr_optional_base(T&& v) : init_(true), storage_(constexpr_move(v)) {}
-
- template <class... Args> explicit constexpr constexpr_optional_base(in_place_t, Args&&... args)
- : init_(true), storage_(constexpr_forward<Args>(args)...) {}
-
- template <class U, class... Args, TR2_OPTIONAL_REQUIRES(is_constructible<T, std::initializer_list<U>>)>
- OPTIONAL_CONSTEXPR_INIT_LIST explicit constexpr_optional_base(in_place_t, std::initializer_list<U> il, Args&&... args)
- : init_(true), storage_(il, std::forward<Args>(args)...) {}
-
- ~constexpr_optional_base() = default;
-};
-
-template <class T>
-using OptionalBase = typename std::conditional<
- is_trivially_destructible<T>::value,
- constexpr_optional_base<typename std::remove_const<T>::type>,
- optional_base<typename std::remove_const<T>::type>
->::type;
-
-
-
-template <class T>
-class optional : private OptionalBase<T>
-{
- static_assert( !std::is_same<typename std::decay<T>::type, nullopt_t>::value, "bad T" );
- static_assert( !std::is_same<typename std::decay<T>::type, in_place_t>::value, "bad T" );
-
-
- constexpr bool initialized() const noexcept { return OptionalBase<T>::init_; }
- typename std::remove_const<T>::type* dataptr() { return std::addressof(OptionalBase<T>::storage_.value_); }
- constexpr const T* dataptr() const { return detail_::static_addressof(OptionalBase<T>::storage_.value_); }
-
-# if OPTIONAL_HAS_THIS_RVALUE_REFS == 1
- constexpr const T& contained_val() const& { return OptionalBase<T>::storage_.value_; }
-# if OPTIONAL_HAS_MOVE_ACCESSORS == 1
- OPTIONAL_MUTABLE_CONSTEXPR T&& contained_val() && { return std::move(OptionalBase<T>::storage_.value_); }
- OPTIONAL_MUTABLE_CONSTEXPR T& contained_val() & { return OptionalBase<T>::storage_.value_; }
-# else
- T& contained_val() & { return OptionalBase<T>::storage_.value_; }
- T&& contained_val() && { return std::move(OptionalBase<T>::storage_.value_); }
-# endif
-# else
- constexpr const T& contained_val() const { return OptionalBase<T>::storage_.value_; }
- T& contained_val() { return OptionalBase<T>::storage_.value_; }
-# endif
-
- void clear() noexcept {
- if (initialized()) dataptr()->T::~T();
- OptionalBase<T>::init_ = false;
- }
-
- template <class... Args>
- void initialize(Args&&... args) noexcept(noexcept(T(std::forward<Args>(args)...)))
- {
- assert(!OptionalBase<T>::init_);
- ::new (static_cast<void*>(dataptr())) T(std::forward<Args>(args)...);
- OptionalBase<T>::init_ = true;
- }
-
- template <class U, class... Args>
- void initialize(std::initializer_list<U> il, Args&&... args) noexcept(noexcept(T(il, std::forward<Args>(args)...)))
- {
- assert(!OptionalBase<T>::init_);
- ::new (static_cast<void*>(dataptr())) T(il, std::forward<Args>(args)...);
- OptionalBase<T>::init_ = true;
- }
-
-public:
- typedef T value_type;
-
- // 20.5.5.1, constructors
- constexpr optional() noexcept : OptionalBase<T>() {};
- constexpr optional(nullopt_t) noexcept : OptionalBase<T>() {};
-
- optional(const optional& rhs)
- : OptionalBase<T>()
- {
- if (rhs.initialized()) {
- ::new (static_cast<void*>(dataptr())) T(*rhs);
- OptionalBase<T>::init_ = true;
- }
- }
-
- optional(optional&& rhs) noexcept(is_nothrow_move_constructible<T>::value)
- : OptionalBase<T>()
- {
- if (rhs.initialized()) {
- ::new (static_cast<void*>(dataptr())) T(std::move(*rhs));
- OptionalBase<T>::init_ = true;
- }
- }
-
- constexpr optional(const T& v) : OptionalBase<T>(v) {}
-
- constexpr optional(T&& v) : OptionalBase<T>(constexpr_move(v)) {}
-
- template <class... Args>
- explicit constexpr optional(in_place_t, Args&&... args)
- : OptionalBase<T>(in_place_t{}, constexpr_forward<Args>(args)...) {}
-
- template <class U, class... Args, TR2_OPTIONAL_REQUIRES(is_constructible<T, std::initializer_list<U>>)>
- OPTIONAL_CONSTEXPR_INIT_LIST explicit optional(in_place_t, std::initializer_list<U> il, Args&&... args)
- : OptionalBase<T>(in_place_t{}, il, constexpr_forward<Args>(args)...) {}
-
- // 20.5.4.2, Destructor
- ~optional() = default;
-
- void reset() noexcept { clear(); }
-
- // 20.5.4.3, assignment
- optional& operator=(nullopt_t) noexcept
- {
- clear();
- return *this;
- }
-
- optional& operator=(const optional& rhs)
- {
- if (initialized() == true && rhs.initialized() == false) clear();
- else if (initialized() == false && rhs.initialized() == true) initialize(*rhs);
- else if (initialized() == true && rhs.initialized() == true) contained_val() = *rhs;
- return *this;
- }
-
- optional& operator=(optional&& rhs)
- noexcept(is_nothrow_move_assignable<T>::value && is_nothrow_move_constructible<T>::value)
- {
- if (initialized() == true && rhs.initialized() == false) clear();
- else if (initialized() == false && rhs.initialized() == true) initialize(std::move(*rhs));
- else if (initialized() == true && rhs.initialized() == true) contained_val() = std::move(*rhs);
- return *this;
- }
-
- template <class U>
- auto operator=(U&& v)
- -> typename enable_if
- <
- is_same<typename decay<U>::type, T>::value,
- optional&
- >::type
- {
- if (initialized()) { contained_val() = std::forward<U>(v); }
- else { initialize(std::forward<U>(v)); }
- return *this;
- }
-
-
- template <class... Args>
- void emplace(Args&&... args)
- {
- clear();
- initialize(std::forward<Args>(args)...);
- }
-
- template <class U, class... Args>
- void emplace(initializer_list<U> il, Args&&... args)
- {
- clear();
- initialize<U, Args...>(il, std::forward<Args>(args)...);
- }
-
- // 20.5.4.4, Swap
- void swap(optional<T>& rhs) noexcept(is_nothrow_move_constructible<T>::value && noexcept(swap(declval<T&>(), declval<T&>())))
- {
- if (initialized() == true && rhs.initialized() == false) { rhs.initialize(std::move(**this)); clear(); }
- else if (initialized() == false && rhs.initialized() == true) { initialize(std::move(*rhs)); rhs.clear(); }
- else if (initialized() == true && rhs.initialized() == true) { using std::swap; swap(**this, *rhs); }
- }
-
- // 20.5.4.5, Observers
-
- explicit constexpr operator bool() const noexcept { return initialized(); }
- constexpr bool has_value() const noexcept { return initialized(); }
-
- constexpr T const* operator ->() const {
- return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), dataptr());
- }
-
-# if OPTIONAL_HAS_MOVE_ACCESSORS == 1
-
- OPTIONAL_MUTABLE_CONSTEXPR T* operator ->() {
- assert (initialized());
- return dataptr();
- }
-
- constexpr T const& operator *() const& {
- return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), contained_val());
- }
-
- OPTIONAL_MUTABLE_CONSTEXPR T& operator *() & {
- assert (initialized());
- return contained_val();
- }
-
- OPTIONAL_MUTABLE_CONSTEXPR T&& operator *() && {
- assert (initialized());
- return constexpr_move(contained_val());
- }
-
- constexpr T const& value() const& {
- return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val());
- }
-
- OPTIONAL_MUTABLE_CONSTEXPR T& value() & {
- return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val());
- }
-
- OPTIONAL_MUTABLE_CONSTEXPR T&& value() && {
- if (!initialized()) throw bad_optional_access("bad optional access");
- return std::move(contained_val());
- }
-
-# else
-
- T* operator ->() {
- assert (initialized());
- return dataptr();
- }
-
- constexpr T const& operator *() const {
- return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), contained_val());
- }
-
- T& operator *() {
- assert (initialized());
- return contained_val();
- }
-
- constexpr T const& value() const {
- return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val());
- }
-
- T& value() {
- return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val());
- }
-
-# endif
-
-# if OPTIONAL_HAS_THIS_RVALUE_REFS == 1
-
- template <class V>
- constexpr T value_or(V&& v) const&
- {
- return *this ? **this : detail_::convert<T>(constexpr_forward<V>(v));
- }
-
-# if OPTIONAL_HAS_MOVE_ACCESSORS == 1
-
- template <class V>
- OPTIONAL_MUTABLE_CONSTEXPR T value_or(V&& v) &&
- {
- return *this ? constexpr_move(const_cast<optional<T>&>(*this).contained_val()) : detail_::convert<T>(constexpr_forward<V>(v));
- }
-
-# else
-
- template <class V>
- T value_or(V&& v) &&
- {
- return *this ? constexpr_move(const_cast<optional<T>&>(*this).contained_val()) : detail_::convert<T>(constexpr_forward<V>(v));
- }
-
-# endif
-
-# else
-
- template <class V>
- constexpr T value_or(V&& v) const
- {
- return *this ? **this : detail_::convert<T>(constexpr_forward<V>(v));
- }
-
-# endif
-
-};
-
-
-template <class T>
-class optional<T&>
-{
- static_assert( !std::is_same<T, nullopt_t>::value, "bad T" );
- static_assert( !std::is_same<T, in_place_t>::value, "bad T" );
- T* ref;
-
-public:
-
- // 20.5.5.1, construction/destruction
- constexpr optional() noexcept : ref(nullptr) {}
-
- constexpr optional(nullopt_t) noexcept : ref(nullptr) {}
-
- constexpr optional(T& v) noexcept : ref(detail_::static_addressof(v)) {}
-
- optional(T&&) = delete;
-
- constexpr optional(const optional& rhs) noexcept : ref(rhs.ref) {}
-
- explicit constexpr optional(in_place_t, T& v) noexcept : ref(detail_::static_addressof(v)) {}
-
- explicit optional(in_place_t, T&&) = delete;
-
- ~optional() = default;
-
- // 20.5.5.2, mutation
- optional& operator=(nullopt_t) noexcept {
- ref = nullptr;
- return *this;
- }
-
- // optional& operator=(const optional& rhs) noexcept {
- // ref = rhs.ref;
- // return *this;
- // }
-
- // optional& operator=(optional&& rhs) noexcept {
- // ref = rhs.ref;
- // return *this;
- // }
-
- template <typename U>
- auto operator=(U&& rhs) noexcept
- -> typename enable_if
- <
- is_same<typename decay<U>::type, optional<T&>>::value,
- optional&
- >::type
- {
- ref = rhs.ref;
- return *this;
- }
-
- template <typename U>
- auto operator=(U&& rhs) noexcept
- -> typename enable_if
- <
- !is_same<typename decay<U>::type, optional<T&>>::value,
- optional&
- >::type
- = delete;
-
- void emplace(T& v) noexcept {
- ref = detail_::static_addressof(v);
- }
-
- void emplace(T&&) = delete;
-
-
- void swap(optional<T&>& rhs) noexcept
- {
- std::swap(ref, rhs.ref);
- }
-
- // 20.5.5.3, observers
- constexpr T* operator->() const {
- return TR2_OPTIONAL_ASSERTED_EXPRESSION(ref, ref);
- }
-
- constexpr T& operator*() const {
- return TR2_OPTIONAL_ASSERTED_EXPRESSION(ref, *ref);
- }
-
- constexpr T& value() const {
- return ref ? *ref : (throw bad_optional_access("bad optional access"), *ref);
- }
-
- explicit constexpr operator bool() const noexcept {
- return ref != nullptr;
- }
- constexpr bool has_value() const noexcept { return ref != nullptr; }
-
- template <class V>
- constexpr typename decay<T>::type value_or(V&& v) const
- {
- return *this ? **this : detail_::convert<typename decay<T>::type>(constexpr_forward<V>(v));
- }
-};
-
-
-template <class T>
-class optional<T&&>
-{
- static_assert( sizeof(T) == 0, "optional rvalue references disallowed" );
-};
-
-
-// 20.5.8, Relational operators
-template <class T> constexpr bool operator==(const optional<T>& x, const optional<T>& y)
-{
- return bool(x) != bool(y) ? false : bool(x) == false ? true : *x == *y;
-}
-
-template <class T> constexpr bool operator!=(const optional<T>& x, const optional<T>& y)
-{
- return !(x == y);
-}
-
-template <class T> constexpr bool operator<(const optional<T>& x, const optional<T>& y)
-{
- return (!y) ? false : (!x) ? true : *x < *y;
-}
-
-template <class T> constexpr bool operator>(const optional<T>& x, const optional<T>& y)
-{
- return (y < x);
-}
-
-template <class T> constexpr bool operator<=(const optional<T>& x, const optional<T>& y)
-{
- return !(y < x);
-}
-
-template <class T> constexpr bool operator>=(const optional<T>& x, const optional<T>& y)
-{
- return !(x < y);
-}
-
-
-// 20.5.9, Comparison with nullopt
-template <class T> constexpr bool operator==(const optional<T>& x, nullopt_t) noexcept
-{
- return (!x);
-}
-
-template <class T> constexpr bool operator==(nullopt_t, const optional<T>& x) noexcept
-{
- return (!x);
-}
-
-template <class T> constexpr bool operator!=(const optional<T>& x, nullopt_t) noexcept
-{
- return bool(x);
-}
-
-template <class T> constexpr bool operator!=(nullopt_t, const optional<T>& x) noexcept
-{
- return bool(x);
-}
-
-template <class T> constexpr bool operator<(const optional<T>&, nullopt_t) noexcept
-{
- return false;
-}
-
-template <class T> constexpr bool operator<(nullopt_t, const optional<T>& x) noexcept
-{
- return bool(x);
-}
-
-template <class T> constexpr bool operator<=(const optional<T>& x, nullopt_t) noexcept
-{
- return (!x);
-}
-
-template <class T> constexpr bool operator<=(nullopt_t, const optional<T>&) noexcept
-{
- return true;
-}
-
-template <class T> constexpr bool operator>(const optional<T>& x, nullopt_t) noexcept
-{
- return bool(x);
-}
-
-template <class T> constexpr bool operator>(nullopt_t, const optional<T>&) noexcept
-{
- return false;
-}
-
-template <class T> constexpr bool operator>=(const optional<T>&, nullopt_t) noexcept
-{
- return true;
-}
-
-template <class T> constexpr bool operator>=(nullopt_t, const optional<T>& x) noexcept
-{
- return (!x);
-}
-
-
-
-// 20.5.10, Comparison with T
-template <class T> constexpr bool operator==(const optional<T>& x, const T& v)
-{
- return bool(x) ? *x == v : false;
-}
-
-template <class T> constexpr bool operator==(const T& v, const optional<T>& x)
-{
- return bool(x) ? v == *x : false;
-}
-
-template <class T> constexpr bool operator!=(const optional<T>& x, const T& v)
-{
- return bool(x) ? *x != v : true;
-}
-
-template <class T> constexpr bool operator!=(const T& v, const optional<T>& x)
-{
- return bool(x) ? v != *x : true;
-}
-
-template <class T> constexpr bool operator<(const optional<T>& x, const T& v)
-{
- return bool(x) ? *x < v : true;
-}
-
-template <class T> constexpr bool operator>(const T& v, const optional<T>& x)
-{
- return bool(x) ? v > *x : true;
-}
-
-template <class T> constexpr bool operator>(const optional<T>& x, const T& v)
-{
- return bool(x) ? *x > v : false;
-}
-
-template <class T> constexpr bool operator<(const T& v, const optional<T>& x)
-{
- return bool(x) ? v < *x : false;
-}
-
-template <class T> constexpr bool operator>=(const optional<T>& x, const T& v)
-{
- return bool(x) ? *x >= v : false;
-}
-
-template <class T> constexpr bool operator<=(const T& v, const optional<T>& x)
-{
- return bool(x) ? v <= *x : false;
-}
-
-template <class T> constexpr bool operator<=(const optional<T>& x, const T& v)
-{
- return bool(x) ? *x <= v : true;
-}
-
-template <class T> constexpr bool operator>=(const T& v, const optional<T>& x)
-{
- return bool(x) ? v >= *x : true;
-}
-
-
-// Comparison of optional<T&> with T
-template <class T> constexpr bool operator==(const optional<T&>& x, const T& v)
-{
- return bool(x) ? *x == v : false;
-}
-
-template <class T> constexpr bool operator==(const T& v, const optional<T&>& x)
-{
- return bool(x) ? v == *x : false;
-}
-
-template <class T> constexpr bool operator!=(const optional<T&>& x, const T& v)
-{
- return bool(x) ? *x != v : true;
-}
-
-template <class T> constexpr bool operator!=(const T& v, const optional<T&>& x)
-{
- return bool(x) ? v != *x : true;
-}
-
-template <class T> constexpr bool operator<(const optional<T&>& x, const T& v)
-{
- return bool(x) ? *x < v : true;
-}
-
-template <class T> constexpr bool operator>(const T& v, const optional<T&>& x)
-{
- return bool(x) ? v > *x : true;
-}
-
-template <class T> constexpr bool operator>(const optional<T&>& x, const T& v)
-{
- return bool(x) ? *x > v : false;
-}
-
-template <class T> constexpr bool operator<(const T& v, const optional<T&>& x)
-{
- return bool(x) ? v < *x : false;
-}
-
-template <class T> constexpr bool operator>=(const optional<T&>& x, const T& v)
-{
- return bool(x) ? *x >= v : false;
-}
-
-template <class T> constexpr bool operator<=(const T& v, const optional<T&>& x)
-{
- return bool(x) ? v <= *x : false;
-}
-
-template <class T> constexpr bool operator<=(const optional<T&>& x, const T& v)
-{
- return bool(x) ? *x <= v : true;
-}
-
-template <class T> constexpr bool operator>=(const T& v, const optional<T&>& x)
-{
- return bool(x) ? v >= *x : true;
-}
-
-// Comparison of optional<T const&> with T
-template <class T> constexpr bool operator==(const optional<const T&>& x, const T& v)
-{
- return bool(x) ? *x == v : false;
-}
-
-template <class T> constexpr bool operator==(const T& v, const optional<const T&>& x)
-{
- return bool(x) ? v == *x : false;
-}
-
-template <class T> constexpr bool operator!=(const optional<const T&>& x, const T& v)
-{
- return bool(x) ? *x != v : true;
-}
-
-template <class T> constexpr bool operator!=(const T& v, const optional<const T&>& x)
-{
- return bool(x) ? v != *x : true;
-}
-
-template <class T> constexpr bool operator<(const optional<const T&>& x, const T& v)
-{
- return bool(x) ? *x < v : true;
-}
-
-template <class T> constexpr bool operator>(const T& v, const optional<const T&>& x)
-{
- return bool(x) ? v > *x : true;
-}
-
-template <class T> constexpr bool operator>(const optional<const T&>& x, const T& v)
-{
- return bool(x) ? *x > v : false;
-}
-
-template <class T> constexpr bool operator<(const T& v, const optional<const T&>& x)
-{
- return bool(x) ? v < *x : false;
-}
-
-template <class T> constexpr bool operator>=(const optional<const T&>& x, const T& v)
-{
- return bool(x) ? *x >= v : false;
-}
-
-template <class T> constexpr bool operator<=(const T& v, const optional<const T&>& x)
-{
- return bool(x) ? v <= *x : false;
-}
-
-template <class T> constexpr bool operator<=(const optional<const T&>& x, const T& v)
-{
- return bool(x) ? *x <= v : true;
-}
-
-template <class T> constexpr bool operator>=(const T& v, const optional<const T&>& x)
-{
- return bool(x) ? v >= *x : true;
-}
-
-
-// 20.5.12, Specialized algorithms
-template <class T>
-void swap(optional<T>& x, optional<T>& y) noexcept(noexcept(x.swap(y)))
-{
- x.swap(y);
-}
-
-
-template <class T>
-constexpr optional<typename decay<T>::type> make_optional(T&& v)
-{
- return optional<typename decay<T>::type>(constexpr_forward<T>(v));
-}
-
-template <class X>
-constexpr optional<X&> make_optional(reference_wrapper<X> v)
-{
- return optional<X&>(v.get());
-}
-
-
-} // namespace experimental
-} // namespace std
-
-namespace std
-{
- template <typename T>
- struct hash<std::experimental::optional<T>>
- {
- typedef typename hash<T>::result_type result_type;
- typedef std::experimental::optional<T> argument_type;
-
- constexpr result_type operator()(argument_type const& arg) const {
- return arg ? std::hash<T>{}(*arg) : result_type{};
- }
- };
-
- template <typename T>
- struct hash<std::experimental::optional<T&>>
- {
- typedef typename hash<T>::result_type result_type;
- typedef std::experimental::optional<T&> argument_type;
-
- constexpr result_type operator()(argument_type const& arg) const {
- return arg ? std::hash<T>{}(*arg) : result_type{};
- }
- };
-}
-
-# undef TR2_OPTIONAL_REQUIRES
-# undef TR2_OPTIONAL_ASSERTED_EXPRESSION
-
-# endif //___OPTIONAL_HPP___
diff --git a/src/libs/3rdparty/optional/test_optional.cpp b/src/libs/3rdparty/optional/test_optional.cpp
deleted file mode 100644
index 8ed356a562..0000000000
--- a/src/libs/3rdparty/optional/test_optional.cpp
+++ /dev/null
@@ -1,1459 +0,0 @@
-// Copyright (C) 2011 - 2012 Andrzej Krzemienski.
-//
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-//
-// The idea and interface is based on Boost.Optional library
-// authored by Fernando Luis Cacciola Carballal
-
-# include "optional.hpp"
-# include <vector>
-# include <iostream>
-# include <functional>
-# include <complex>
-
-
-
-struct caller {
- template <class T> caller(T fun) { fun(); }
-};
-# define CAT2(X, Y) X ## Y
-# define CAT(X, Y) CAT2(X, Y)
-# define TEST(NAME) caller CAT(__VAR, __LINE__) = []
-
-enum State
-{
- sDefaultConstructed,
- sValueCopyConstructed,
- sValueMoveConstructed,
- sCopyConstructed,
- sMoveConstructed,
- sMoveAssigned,
- sCopyAssigned,
- sValueCopyAssigned,
- sValueMoveAssigned,
- sMovedFrom,
- sValueConstructed
-};
-
-struct OracleVal
-{
- State s;
- int i;
- OracleVal(int i = 0) : s(sValueConstructed), i(i) {}
-};
-
-struct Oracle
-{
- State s;
- OracleVal val;
-
- Oracle() : s(sDefaultConstructed) {}
- Oracle(const OracleVal& v) : s(sValueCopyConstructed), val(v) {}
- Oracle(OracleVal&& v) : s(sValueMoveConstructed), val(std::move(v)) {v.s = sMovedFrom;}
- Oracle(const Oracle& o) : s(sCopyConstructed), val(o.val) {}
- Oracle(Oracle&& o) : s(sMoveConstructed), val(std::move(o.val)) {o.s = sMovedFrom;}
-
- Oracle& operator=(const OracleVal& v) { s = sValueCopyConstructed; val = v; return *this; }
- Oracle& operator=(OracleVal&& v) { s = sValueMoveConstructed; val = std::move(v); v.s = sMovedFrom; return *this; }
- Oracle& operator=(const Oracle& o) { s = sCopyConstructed; val = o.val; return *this; }
- Oracle& operator=(Oracle&& o) { s = sMoveConstructed; val = std::move(o.val); o.s = sMovedFrom; return *this; }
-};
-
-struct Guard
-{
- std::string val;
- Guard() : val{} {}
- explicit Guard(std::string s, int = 0) : val(s) {}
- Guard(const Guard&) = delete;
- Guard(Guard&&) = delete;
- void operator=(const Guard&) = delete;
- void operator=(Guard&&) = delete;
-};
-
-struct ExplicitStr
-{
- std::string s;
- explicit ExplicitStr(const char* chp) : s(chp) {};
-};
-
-struct Date
-{
- int i;
- Date() = delete;
- Date(int i) : i{i} {};
- Date(Date&& d) : i(d.i) { d.i = 0; }
- Date(const Date&) = delete;
- Date& operator=(const Date&) = delete;
- Date& operator=(Date&& d) { i = d.i; d.i = 0; return *this;};
-};
-
-bool operator==( Oracle const& a, Oracle const& b ) { return a.val.i == b.val.i; }
-bool operator!=( Oracle const& a, Oracle const& b ) { return a.val.i != b.val.i; }
-
-
-namespace tr2 = std::experimental;
-
-
-TEST(disengaged_ctor)
-{
- tr2::optional<int> o1;
- assert (!o1);
-
- tr2::optional<int> o2 = tr2::nullopt;
- assert (!o2);
-
- tr2::optional<int> o3 = o2;
- assert (!o3);
-
- assert (o1 == tr2::nullopt);
- assert (o1 == tr2::optional<int>{});
- assert (!o1);
- assert (bool(o1) == false);
-
- assert (o2 == tr2::nullopt);
- assert (o2 == tr2::optional<int>{});
- assert (!o2);
- assert (bool(o2) == false);
-
- assert (o3 == tr2::nullopt);
- assert (o3 == tr2::optional<int>{});
- assert (!o3);
- assert (bool(o3) == false);
-
- assert (o1 == o2);
- assert (o2 == o1);
- assert (o1 == o3);
- assert (o3 == o1);
- assert (o2 == o3);
- assert (o3 == o2);
-};
-
-
-TEST(value_ctor)
-{
- OracleVal v;
- tr2::optional<Oracle> oo1(v);
- assert (oo1 != tr2::nullopt);
- assert (oo1 != tr2::optional<Oracle>{});
- assert (oo1 == tr2::optional<Oracle>{v});
- assert (!!oo1);
- assert (bool(oo1));
- // NA: assert (oo1->s == sValueCopyConstructed);
- assert (oo1->s == sMoveConstructed);
- assert (v.s == sValueConstructed);
-
- tr2::optional<Oracle> oo2(std::move(v));
- assert (oo2 != tr2::nullopt);
- assert (oo2 != tr2::optional<Oracle>{});
- assert (oo2 == oo1);
- assert (!!oo2);
- assert (bool(oo2));
- // NA: assert (oo2->s == sValueMoveConstructed);
- assert (oo2->s == sMoveConstructed);
- assert (v.s == sMovedFrom);
-
- {
- OracleVal v;
- tr2::optional<Oracle> oo1{tr2::in_place, v};
- assert (oo1 != tr2::nullopt);
- assert (oo1 != tr2::optional<Oracle>{});
- assert (oo1 == tr2::optional<Oracle>{v});
- assert (!!oo1);
- assert (bool(oo1));
- assert (oo1->s == sValueCopyConstructed);
- assert (v.s == sValueConstructed);
-
- tr2::optional<Oracle> oo2{tr2::in_place, std::move(v)};
- assert (oo2 != tr2::nullopt);
- assert (oo2 != tr2::optional<Oracle>{});
- assert (oo2 == oo1);
- assert (!!oo2);
- assert (bool(oo2));
- assert (oo2->s == sValueMoveConstructed);
- assert (v.s == sMovedFrom);
- }
-};
-
-
-TEST(assignment)
-{
- tr2::optional<int> oi;
- oi = tr2::optional<int>{1};
- assert (*oi == 1);
-
- oi = tr2::nullopt;
- assert (!oi);
-
- oi = 2;
- assert (*oi == 2);
-
- oi = {};
- assert (!oi);
-};
-
-
-template <class T>
-struct MoveAware
-{
- T val;
- bool moved;
- MoveAware(T val) : val(val), moved(false) {}
- MoveAware(MoveAware const&) = delete;
- MoveAware(MoveAware&& rhs) : val(rhs.val), moved(rhs.moved) {
- rhs.moved = true;
- }
- MoveAware& operator=(MoveAware const&) = delete;
- MoveAware& operator=(MoveAware&& rhs) {
- val = (rhs.val);
- moved = (rhs.moved);
- rhs.moved = true;
- return *this;
- }
-};
-
-TEST(moved_from_state)
-{
- // first, test mock:
- MoveAware<int> i{1}, j{2};
- assert (i.val == 1);
- assert (!i.moved);
- assert (j.val == 2);
- assert (!j.moved);
-
- MoveAware<int> k = std::move(i);
- assert (k.val == 1);
- assert (!k.moved);
- assert (i.val == 1);
- assert (i.moved);
-
- k = std::move(j);
- assert (k.val == 2);
- assert (!k.moved);
- assert (j.val == 2);
- assert (j.moved);
-
- // now, test optional
- tr2::optional<MoveAware<int>> oi{1}, oj{2};
- assert (oi);
- assert (!oi->moved);
- assert (oj);
- assert (!oj->moved);
-
- tr2::optional<MoveAware<int>> ok = std::move(oi);
- assert (ok);
- assert (!ok->moved);
- assert (oi);
- assert (oi->moved);
-
- ok = std::move(oj);
- assert (ok);
- assert (!ok->moved);
- assert (oj);
- assert (oj->moved);
-};
-
-
-TEST(copy_move_ctor_optional_int)
-{
- tr2::optional<int> oi;
- tr2::optional<int> oj = oi;
-
- assert (!oj);
- assert (oj == oi);
- assert (oj == tr2::nullopt);
- assert (!bool(oj));
-
- oi = 1;
- tr2::optional<int> ok = oi;
- assert (!!ok);
- assert (bool(ok));
- assert (ok == oi);
- assert (ok != oj);
- assert (*ok == 1);
-
- tr2::optional<int> ol = std::move(oi);
- assert (!!ol);
- assert (bool(ol));
- assert (ol == oi);
- assert (ol != oj);
- assert (*ol == 1);
-};
-
-
-TEST(optional_optional)
-{
- tr2::optional<tr2::optional<int>> oi1 = tr2::nullopt;
- assert (oi1 == tr2::nullopt);
- assert (!oi1);
-
- {
- tr2::optional<tr2::optional<int>> oi2 {tr2::in_place};
- assert (oi2 != tr2::nullopt);
- assert (bool(oi2));
- assert (*oi2 == tr2::nullopt);
- //assert (!(*oi2));
- //std::cout << typeid(**oi2).name() << std::endl;
- }
-
- {
- tr2::optional<tr2::optional<int>> oi2 {tr2::in_place, tr2::nullopt};
- assert (oi2 != tr2::nullopt);
- assert (bool(oi2));
- assert (*oi2 == tr2::nullopt);
- assert (!*oi2);
- }
-
- {
- tr2::optional<tr2::optional<int>> oi2 {tr2::optional<int>{}};
- assert (oi2 != tr2::nullopt);
- assert (bool(oi2));
- assert (*oi2 == tr2::nullopt);
- assert (!*oi2);
- }
-
- tr2::optional<int> oi;
- auto ooi = tr2::make_optional(oi);
- static_assert( std::is_same<tr2::optional<tr2::optional<int>>, decltype(ooi)>::value, "");
-
-};
-
-TEST(example_guard)
-{
- using namespace tr2;
- //FAILS: optional<Guard> ogx(Guard("res1"));
- //FAILS: optional<Guard> ogx = "res1";
- //FAILS: optional<Guard> ogx("res1");
- optional<Guard> oga; // Guard is non-copyable (and non-moveable)
- optional<Guard> ogb(in_place, "res1"); // initialzes the contained value with "res1"
- assert (bool(ogb));
- assert (ogb->val == "res1");
-
- optional<Guard> ogc(in_place); // default-constructs the contained value
- assert (bool(ogc));
- assert (ogc->val == "");
-
- oga.emplace("res1"); // initialzes the contained value with "res1"
- assert (bool(oga));
- assert (oga->val == "res1");
-
- oga.emplace(); // destroys the contained value and
- // default-constructs the new one
- assert (bool(oga));
- assert (oga->val == "");
-
- oga = nullopt; // OK: make disengaged the optional Guard
- assert (!(oga));
- //FAILS: ogb = {}; // ERROR: Guard is not Moveable
-};
-
-
-void process(){}
-void process(int ){}
-void processNil(){}
-
-
-TEST(example1)
-{
- using namespace tr2;
- optional<int> oi; // create disengaged object
- optional<int> oj = nullopt; // alternative syntax
- oi = oj; // assign disengaged object
- optional<int> ok = oj; // ok is disengaged
-
- if (oi) assert(false); // 'if oi is engaged...'
- if (!oi) assert(true); // 'if oi is disengaged...'
-
- if (oi != nullopt) assert(false); // 'if oi is engaged...'
- if (oi == nullopt) assert(true); // 'if oi is disengaged...'
-
- assert(oi == ok); // two disengaged optionals compare equal
-
- ///////////////////////////////////////////////////////////////////////////
- optional<int> ol{1}; // ol is engaged; its contained value is 1
- ok = 2; // ok becomes engaged; its contained value is 2
- oj = ol; // oj becomes engaged; its contained value is 1
-
- assert(oi != ol); // disengaged != engaged
- assert(ok != ol); // different contained values
- assert(oj == ol); // same contained value
- assert(oi < ol); // disengaged < engaged
- assert(ol < ok); // less by contained value
-
- /////////////////////////////////////////////////////////////////////////////
- optional<int> om{1}; // om is engaged; its contained value is 1
- optional<int> on = om; // on is engaged; its contained value is 1
- om = 2; // om is engaged; its contained value is 2
- assert (on != om); // on still contains 3. They are not pointers
-
- /////////////////////////////////////////////////////////////////////////////
- int i = *ol; // i obtains the value contained in ol
- assert (i == 1);
- *ol = 9; // the object contained in ol becomes 9
- assert(*ol == 9);
- assert(ol == make_optional(9));
-
- ///////////////////////////////////
- int p = 1;
- optional<int> op = p;
- assert(*op == 1);
- p = 2;
- assert(*op == 1); // value contained in op is separated from p
-
- ////////////////////////////////
- if (ol)
- process(*ol); // use contained value if present
- else
- process(); // proceed without contained value
-
- if (!om)
- processNil();
- else
- process(*om);
-
- /////////////////////////////////////////
- process(ol.value_or(0)); // use 0 if ol is disengaged
-
- ////////////////////////////////////////////
- ok = nullopt; // if ok was engaged calls T's dtor
- oj = {}; // assigns a temporary disengaged optional
-};
-
-
-TEST(example_guard)
-{
- using std::experimental::optional;
- const optional<int> c = 4;
- int i = *c; // i becomes 4
- assert (i == 4);
- // FAILS: *c = i; // ERROR: cannot assign to const int&
-};
-
-
-TEST(example_ref)
-{
- using namespace std::experimental;
- int i = 1;
- int j = 2;
- optional<int&> ora; // disengaged optional reference to int
- optional<int&> orb = i; // contained reference refers to object i
-
- *orb = 3; // i becomes 3
- // FAILS: ora = j; // ERROR: optional refs do not have assignment from T
- // FAILS: ora = {j}; // ERROR: optional refs do not have copy/move assignment
- // FAILS: ora = orb; // ERROR: no copy/move assignment
- ora.emplace(j); // OK: contained reference refers to object j
- ora.emplace(i); // OK: contained reference now refers to object i
-
- ora = nullopt; // OK: ora becomes disengaged
-};
-
-
-template <typename T>
-T getValue( tr2::optional<T> newVal = tr2::nullopt, tr2::optional<T&> storeHere = tr2::nullopt )
-{
- T cached{};
-
- if (newVal) {
- cached = *newVal;
-
- if (storeHere) {
- *storeHere = *newVal; // LEGAL: assigning T to T
- }
- }
- return cached;
-}
-
-TEST(example_optional_arg)
-{
- int iii = 0;
- iii = getValue<int>(iii, iii);
- iii = getValue<int>(iii);
- iii = getValue<int>();
-
- {
- using namespace std::experimental;
- optional<Guard> grd1{in_place, "res1", 1}; // guard 1 initialized
- optional<Guard> grd2;
-
- grd2.emplace("res2", 2); // guard 2 initialized
- grd1 = nullopt; // guard 1 released
-
- } // guard 2 released (in dtor)
-};
-
-
-std::tuple<Date, Date, Date> getStartMidEnd() { return std::tuple<Date, Date, Date>{Date{1}, Date{2}, Date{3}}; }
-void run(Date const&, Date const&, Date const&) {}
-
-TEST(example_date)
-{
- using namespace std::experimental;
- optional<Date> start, mid, end; // Date doesn't have default ctor (no good default date)
-
- std::tie(start, mid, end) = getStartMidEnd();
- run(*start, *mid, *end);
-};
-
-
-std::experimental::optional<char> readNextChar(){ return{}; }
-
-void run(std::experimental::optional<std::string>) {}
-void run(std::complex<double>) {}
-
-
-template <class T>
-void assign_norebind(tr2::optional<T&>& optref, T& obj)
-{
- if (optref) *optref = obj;
- else optref.emplace(obj);
-}
-
-template <typename T> void unused(T&&) {}
-
-TEST(example_conceptual_model)
-{
- using namespace std::experimental;
-
- optional<int> oi = 0;
- optional<int> oj = 1;
- optional<int> ok = nullopt;
-
- oi = 1;
- oj = nullopt;
- ok = 0;
-
- unused(oi == nullopt);
- unused(oj == 0);
- unused(ok == 1);
-};
-
-TEST(example_rationale)
-{
- using namespace std::experimental;
- if (optional<char> ch = readNextChar()) {
- unused(ch);
- // ...
- }
-
- //////////////////////////////////
- optional<int> opt1 = nullopt;
- optional<int> opt2 = {};
-
- opt1 = nullopt;
- opt2 = {};
-
- if (opt1 == nullopt) {}
- if (!opt2) {}
- if (opt2 == optional<int>{}) {}
-
-
-
- ////////////////////////////////
-
- run(nullopt); // pick the second overload
- // FAILS: run({}); // ambiguous
-
- if (opt1 == nullopt) {} // fine
- // FAILS: if (opt2 == {}) {} // ilegal
-
- ////////////////////////////////
- assert (optional<unsigned>{} < optional<unsigned>{0});
- assert (optional<unsigned>{0} < optional<unsigned>{1});
- assert (!(optional<unsigned>{} < optional<unsigned>{}) );
- assert (!(optional<unsigned>{1} < optional<unsigned>{1}));
-
- assert (optional<unsigned>{} != optional<unsigned>{0});
- assert (optional<unsigned>{0} != optional<unsigned>{1});
- assert (optional<unsigned>{} == optional<unsigned>{} );
- assert (optional<unsigned>{0} == optional<unsigned>{0});
-
- /////////////////////////////////
- optional<int> o;
- o = make_optional(1); // copy/move assignment
- o = 1; // assignment from T
- o.emplace(1); // emplacement
-
- ////////////////////////////////////
- int isas = 0, i = 9;
- optional<int&> asas = i;
- assign_norebind(asas, isas);
-
- /////////////////////////////////////
- ////tr2::optional<std::vector<int>> ov2 = {2, 3};
- ////assert (bool(ov2));
- ////assert ((*ov2)[1] == 3);
- ////
- ////////////////////////////////
- ////std::vector<int> v = {1, 2, 4, 8};
- ////optional<std::vector<int>> ov = {1, 2, 4, 8};
-
- ////assert (v == *ov);
- ////
- ////ov = {1, 2, 4, 8};
-
- ////std::allocator<int> a;
- ////optional<std::vector<int>> ou { in_place, {1, 2, 4, 8}, a };
-
- ////assert (ou == ov);
-
- //////////////////////////////
- // inconvenient syntax:
- {
-
- tr2::optional<std::vector<int>> ov2{tr2::in_place, {2, 3}};
-
- assert (bool(ov2));
- assert ((*ov2)[1] == 3);
-
- ////////////////////////////
-
- std::vector<int> v = {1, 2, 4, 8};
- optional<std::vector<int>> ov{tr2::in_place, {1, 2, 4, 8}};
-
- assert (v == *ov);
-
- ov.emplace({1, 2, 4, 8});
-/*
- std::allocator<int> a;
- optional<std::vector<int>> ou { in_place, {1, 2, 4, 8}, a };
-
- assert (ou == ov);
-*/
- }
-
- /////////////////////////////////
- {
- typedef int T;
- optional<optional<T>> ot {in_place};
- optional<optional<T>> ou {in_place, nullopt};
- optional<optional<T>> ov {optional<T>{}};
-
- optional<int> oi;
- auto ooi = make_optional(oi);
- static_assert( std::is_same<optional<optional<int>>, decltype(ooi)>::value, "");
- }
-};
-
-
-bool fun(std::string , std::experimental::optional<int> oi = std::experimental::nullopt)
-{
- return bool(oi);
-}
-
-TEST(example_converting_ctor)
-{
- using namespace std::experimental;
-
- assert (true == fun("dog", 2));
- assert (false == fun("dog"));
- assert (false == fun("dog", nullopt)); // just to be explicit
-};
-
-
-TEST(bad_comparison)
-{
- tr2::optional<int> oi, oj;
- int i;
- bool b = (oi == oj);
- b = (oi >= i);
- b = (oi == i);
- unused(b);
-};
-
-
-//// NOT APPLICABLE ANYMORE
-////TEST(perfect_ctor)
-////{
-//// //tr2::optional<std::string> ois = "OS";
-//// assert (*ois == "OS");
-////
-//// // FAILS: tr2::optional<ExplicitStr> oes = "OS";
-//// tr2::optional<ExplicitStr> oes{"OS"};
-//// assert (oes->s == "OS");
-////};
-
-TEST(value_or)
-{
- tr2::optional<int> oi = 1;
- int i = oi.value_or(0);
- assert (i == 1);
-
- oi = tr2::nullopt;
- assert (oi.value_or(3) == 3);
-
- tr2::optional<std::string> os{"AAA"};
- assert (os.value_or("BBB") == "AAA");
- os = {};
- assert (os.value_or("BBB") == "BBB");
-};
-
-TEST(mixed_order)
-{
- using namespace std::experimental;
-
- optional<int> oN {nullopt};
- optional<int> o0 {0};
- optional<int> o1 {1};
-
- assert ( (oN < 0));
- assert ( (oN < 1));
- assert (!(o0 < 0));
- assert ( (o0 < 1));
- assert (!(o1 < 0));
- assert (!(o1 < 1));
-
- assert (!(oN >= 0));
- assert (!(oN >= 1));
- assert ( (o0 >= 0));
- assert (!(o0 >= 1));
- assert ( (o1 >= 0));
- assert ( (o1 >= 1));
-
- assert (!(oN > 0));
- assert (!(oN > 1));
- assert (!(o0 > 0));
- assert (!(o0 > 1));
- assert ( (o1 > 0));
- assert (!(o1 > 1));
-
- assert ( (oN <= 0));
- assert ( (oN <= 1));
- assert ( (o0 <= 0));
- assert ( (o0 <= 1));
- assert (!(o1 <= 0));
- assert ( (o1 <= 1));
-
- assert ( (0 > oN));
- assert ( (1 > oN));
- assert (!(0 > o0));
- assert ( (1 > o0));
- assert (!(0 > o1));
- assert (!(1 > o1));
-
- assert (!(0 <= oN));
- assert (!(1 <= oN));
- assert ( (0 <= o0));
- assert (!(1 <= o0));
- assert ( (0 <= o1));
- assert ( (1 <= o1));
-
- assert (!(0 < oN));
- assert (!(1 < oN));
- assert (!(0 < o0));
- assert (!(1 < o0));
- assert ( (0 < o1));
- assert (!(1 < o1));
-
- assert ( (0 >= oN));
- assert ( (1 >= oN));
- assert ( (0 >= o0));
- assert ( (1 >= o0));
- assert (!(0 >= o1));
- assert ( (1 >= o1));
-};
-
-struct BadRelops
-{
- int i;
-};
-
-constexpr bool operator<(BadRelops a, BadRelops b) { return a.i < b.i; }
-constexpr bool operator>(BadRelops a, BadRelops b) { return a.i < b.i; } // intentional error!
-
-TEST(bad_relops)
-{
- using namespace std::experimental;
- BadRelops a{1}, b{2};
- assert (a < b);
- assert (a > b);
-
- optional<BadRelops> oa = a, ob = b;
- assert (oa < ob);
- assert (!(oa > ob));
-
- assert (oa < b);
- assert (oa > b);
-
- optional<BadRelops&> ra = a, rb = b;
- assert (ra < rb);
- assert (!(ra > rb));
-
- assert (ra < b);
- assert (ra > b);
-};
-
-
-TEST(mixed_equality)
-{
- using namespace std::experimental;
-
- assert (make_optional(0) == 0);
- assert (make_optional(1) == 1);
- assert (make_optional(0) != 1);
- assert (make_optional(1) != 0);
-
- optional<int> oN {nullopt};
- optional<int> o0 {0};
- optional<int> o1 {1};
-
- assert (o0 == 0);
- assert ( 0 == o0);
- assert (o1 == 1);
- assert ( 1 == o1);
- assert (o1 != 0);
- assert ( 0 != o1);
- assert (o0 != 1);
- assert ( 1 != o0);
-
- assert ( 1 != oN);
- assert ( 0 != oN);
- assert (oN != 1);
- assert (oN != 0);
- assert (!( 1 == oN));
- assert (!( 0 == oN));
- assert (!(oN == 1));
- assert (!(oN == 0));
-
- std::string cat{"cat"}, dog{"dog"};
- optional<std::string> oNil{}, oDog{"dog"}, oCat{"cat"};
-
- assert (oCat == cat);
- assert ( cat == oCat);
- assert (oDog == dog);
- assert ( dog == oDog);
- assert (oDog != cat);
- assert ( cat != oDog);
- assert (oCat != dog);
- assert ( dog != oCat);
-
- assert ( dog != oNil);
- assert ( cat != oNil);
- assert (oNil != dog);
- assert (oNil != cat);
- assert (!( dog == oNil));
- assert (!( cat == oNil));
- assert (!(oNil == dog));
- assert (!(oNil == cat));
-};
-
-TEST(const_propagation)
-{
- using namespace std::experimental;
-
- optional<int> mmi{0};
- static_assert(std::is_same<decltype(*mmi), int&>::value, "WTF");
-
- const optional<int> cmi{0};
- static_assert(std::is_same<decltype(*cmi), const int&>::value, "WTF");
-
- optional<const int> mci{0};
- static_assert(std::is_same<decltype(*mci), const int&>::value, "WTF");
-
- optional<const int> cci{0};
- static_assert(std::is_same<decltype(*cci), const int&>::value, "WTF");
-};
-
-
-static_assert(std::is_base_of<std::logic_error, std::experimental::bad_optional_access>::value, "");
-
-TEST(safe_value)
-{
- using namespace std::experimental;
-
- try {
- optional<int> ovN{}, ov1{1};
-
- int& r1 = ov1.value();
- assert (r1 == 1);
-
- try {
- ovN.value();
- assert (false);
- }
- catch (bad_optional_access const&) {
- }
-
- { // ref variant
- int i1 = 1;
- optional<int&> orN{}, or1{i1};
-
- int& r2 = or1.value();
- assert (r2 == 1);
-
- try {
- orN.value();
- assert (false);
- }
- catch (bad_optional_access const&) {
- }
- }
- }
- catch(...) {
- assert (false);
- }
-};
-
-TEST(optional_ref)
-{
- using namespace tr2;
- // FAILS: optional<int&&> orr;
- // FAILS: optional<nullopt_t&> on;
- int i = 8;
- optional<int&> ori;
- assert (!ori);
- ori.emplace(i);
- assert (bool(ori));
- assert (*ori == 8);
- assert (&*ori == &i);
- *ori = 9;
- assert (i == 9);
-
- // FAILS: int& ir = ori.value_or(i);
- int ii = ori.value_or(i);
- assert (ii == 9);
- ii = 7;
- assert (*ori == 9);
-
- int j = 22;
- auto&& oj = make_optional(std::ref(j));
- *oj = 23;
- assert (&*oj == &j);
- assert (j == 23);
-};
-
-TEST(optional_ref_const_propagation)
-{
- using namespace std::experimental;
-
- int i = 9;
- const optional<int&> mi = i;
- int& r = *mi;
- optional<const int&> ci = i;
- static_assert(std::is_same<decltype(*mi), int&>::value, "WTF");
- static_assert(std::is_same<decltype(*ci), const int&>::value, "WTF");
-
- unused(r);
-};
-
-TEST(optional_ref_assign)
-{
- using namespace std::experimental;
-
- int i = 9;
- optional<int&> ori = i;
-
- int j = 1;
- ori = optional<int&>{j};
- ori = {j};
- // FAILS: ori = j;
-
- optional<int&> orx = ori;
- ori = orx;
-
- optional<int&> orj = j;
-
- assert (ori);
- assert (*ori == 1);
- assert (ori == orj);
- assert (i == 9);
-
- *ori = 2;
- assert (*ori == 2);
- assert (ori == 2);
- assert (2 == ori);
- assert (ori != 3);
-
- assert (ori == orj);
- assert (j == 2);
- assert (i == 9);
-
- ori = {};
- assert (!ori);
- assert (ori != orj);
- assert (j == 2);
- assert (i == 9);
-};
-
-
-TEST(optional_ref_swap)
-{
- using namespace std::experimental;
- int i = 0;
- int j = 1;
- optional<int&> oi = i;
- optional<int&> oj = j;
-
- assert (&*oi == &i);
- assert (&*oj == &j);
-
- swap(oi, oj);
- assert (&*oi == &j);
- assert (&*oj == &i);
-};
-
-TEST(optional_initialization)
-{
- using namespace tr2;
- using std::string;
- string s = "STR";
-
- optional<string> os{s};
- optional<string> ot = s;
- optional<string> ou{"STR"};
- optional<string> ov = string{"STR"};
-
-};
-
-#include <unordered_set>
-
-TEST(optional_hashing)
-{
- using namespace tr2;
- using std::string;
-
- std::hash<int> hi;
- std::hash<optional<int>> hoi;
- std::hash<string> hs;
- std::hash<optional<string>> hos;
-
- assert (hi(0) == hoi(optional<int>{0}));
- assert (hi(1) == hoi(optional<int>{1}));
- assert (hi(3198) == hoi(optional<int>{3198}));
-
- assert (hs("") == hos(optional<string>{""}));
- assert (hs("0") == hos(optional<string>{"0"}));
- assert (hs("Qa1#") == hos(optional<string>{"Qa1#"}));
-
- std::unordered_set<optional<string>> set;
- assert(set.find({"Qa1#"}) == set.end());
-
- set.insert({"0"});
- assert(set.find({"Qa1#"}) == set.end());
-
- set.insert({"Qa1#"});
- assert(set.find({"Qa1#"}) != set.end());
-};
-
-
-// optional_ref_emulation
-template <class T>
-struct generic
-{
- typedef T type;
-};
-
-template <class U>
-struct generic<U&>
-{
- typedef std::reference_wrapper<U> type;
-};
-
-template <class T>
-using Generic = typename generic<T>::type;
-
-template <class X>
-bool generic_fun()
-{
- std::experimental::optional<Generic<X>> op;
- return bool(op);
-}
-
-TEST(optional_ref_emulation)
-{
- using namespace std::experimental;
- optional<Generic<int>> oi = 1;
- assert (*oi == 1);
-
- int i = 8;
- int j = 4;
- optional<Generic<int&>> ori {i};
- assert (*ori == 8);
- assert ((void*)&*ori != (void*)&i); // !DIFFERENT THAN optional<T&>
-
- *ori = j;
- assert (*ori == 4);
-};
-
-
-# if OPTIONAL_HAS_THIS_RVALUE_REFS == 1
-TEST(moved_on_value_or)
-{
- using namespace tr2;
- optional<Oracle> oo{in_place};
-
- assert (oo);
- assert (oo->s == sDefaultConstructed);
-
- Oracle o = std::move(oo).value_or( Oracle{OracleVal{}} );
- assert (oo);
- assert (oo->s == sMovedFrom);
- assert (o.s == sMoveConstructed);
-
- optional<MoveAware<int>> om {in_place, 1};
- assert (om);
- assert (om->moved == false);
-
- /*MoveAware<int> m =*/ std::move(om).value_or( MoveAware<int>{1} );
- assert (om);
- assert (om->moved == true);
-
-# if OPTIONAL_HAS_MOVE_ACCESSORS == 1
- {
- Date d = optional<Date>{in_place, 1}.value();
- assert (d.i); // to silence compiler warning
-
- Date d2 = *optional<Date>{in_place, 1};
- assert (d2.i); // to silence compiler warning
- }
-# endif
-};
-# endif
-
-
-TEST(optional_ref_hashing)
-{
- using namespace tr2;
- using std::string;
-
- std::hash<int> hi;
- std::hash<optional<int&>> hoi;
- std::hash<string> hs;
- std::hash<optional<string&>> hos;
-
- int i0 = 0;
- int i1 = 1;
- assert (hi(0) == hoi(optional<int&>{i0}));
- assert (hi(1) == hoi(optional<int&>{i1}));
-
- string s{""};
- string s0{"0"};
- string sCAT{"CAT"};
- assert (hs("") == hos(optional<string&>{s}));
- assert (hs("0") == hos(optional<string&>{s0}));
- assert (hs("CAT") == hos(optional<string&>{sCAT}));
-
- std::unordered_set<optional<string&>> set;
- assert(set.find({sCAT}) == set.end());
-
- set.insert({s0});
- assert(set.find({sCAT}) == set.end());
-
- set.insert({sCAT});
- assert(set.find({sCAT}) != set.end());
-};
-
-struct Combined
-{
- int m = 0;
- int n = 1;
-
- constexpr Combined() : m{5}, n{6} {}
- constexpr Combined(int m, int n) : m{m}, n{n} {}
-};
-
-struct Nasty
-{
- int m = 0;
- int n = 1;
-
- constexpr Nasty() : m{5}, n{6} {}
- constexpr Nasty(int m, int n) : m{m}, n{n} {}
-
- int operator&() { return n; }
- int operator&() const { return n; }
-};
-
-TEST(arrow_operator)
-{
- using namespace std::experimental;
-
- optional<Combined> oc1{in_place, 1, 2};
- assert (oc1);
- assert (oc1->m == 1);
- assert (oc1->n == 2);
-
- optional<Nasty> on{in_place, 1, 2};
- assert (on);
- assert (on->m == 1);
- assert (on->n == 2);
-};
-
-TEST(arrow_wit_optional_ref)
-{
- using namespace std::experimental;
-
- Combined c{1, 2};
- optional<Combined&> oc = c;
- assert (oc);
- assert (oc->m == 1);
- assert (oc->n == 2);
-
- Nasty n{1, 2};
- Nasty m{3, 4};
- Nasty p{5, 6};
-
- optional<Nasty&> on{n};
- assert (on);
- assert (on->m == 1);
- assert (on->n == 2);
-
- on = {m};
- assert (on);
- assert (on->m == 3);
- assert (on->n == 4);
-
- on.emplace(p);
- assert (on);
- assert (on->m == 5);
- assert (on->n == 6);
-
- optional<Nasty&> om{in_place, n};
- assert (om);
- assert (om->m == 1);
- assert (om->n == 2);
-};
-
-TEST(no_dangling_reference_in_value)
-{
- // this mostly tests compiler warnings
- using namespace std::experimental;
- optional<int> oi {2};
- unused (oi.value());
- const optional<int> coi {3};
- unused (coi.value());
-};
-
-struct CountedObject
-{
- static int _counter;
- bool _throw;
- CountedObject(bool b) : _throw(b) { ++_counter; }
- CountedObject(CountedObject const& rhs) : _throw(rhs._throw) { if (_throw) throw int(); }
- ~CountedObject() { --_counter; }
-};
-
-int CountedObject::_counter = 0;
-
-TEST(exception_safety)
-{
- using namespace std::experimental;
- try {
- optional<CountedObject> oo(in_place, true); // throw
- optional<CountedObject> o1(oo);
- }
- catch(...)
- {
- //
- }
- assert(CountedObject::_counter == 0);
-
- try {
- optional<CountedObject> oo(in_place, true); // throw
- optional<CountedObject> o1(std::move(oo)); // now move
- }
- catch(...)
- {
- //
- }
- assert(CountedObject::_counter == 0);
-};
-
-//// constexpr tests
-
-// these 4 classes have different noexcept signatures in move operations
-struct NothrowBoth {
- NothrowBoth(NothrowBoth&&) noexcept(true) {};
- void operator=(NothrowBoth&&) noexcept(true) {};
-};
-struct NothrowCtor {
- NothrowCtor(NothrowCtor&&) noexcept(true) {};
- void operator=(NothrowCtor&&) noexcept(false) {};
-};
-struct NothrowAssign {
- NothrowAssign(NothrowAssign&&) noexcept(false) {};
- void operator=(NothrowAssign&&) noexcept(true) {};
-};
-struct NothrowNone {
- NothrowNone(NothrowNone&&) noexcept(false) {};
- void operator=(NothrowNone&&) noexcept(false) {};
-};
-
-void test_noexcept()
-{
- {
- tr2::optional<NothrowBoth> b1, b2;
- static_assert(noexcept(tr2::optional<NothrowBoth>{tr2::constexpr_move(b1)}), "bad noexcept!");
- static_assert(noexcept(b1 = tr2::constexpr_move(b2)), "bad noexcept!");
- }
- {
- tr2::optional<NothrowCtor> c1, c2;
- static_assert(noexcept(tr2::optional<NothrowCtor>{tr2::constexpr_move(c1)}), "bad noexcept!");
- static_assert(!noexcept(c1 = tr2::constexpr_move(c2)), "bad noexcept!");
- }
- {
- tr2::optional<NothrowAssign> a1, a2;
- static_assert(!noexcept(tr2::optional<NothrowAssign>{tr2::constexpr_move(a1)}), "bad noexcept!");
- static_assert(!noexcept(a1 = tr2::constexpr_move(a2)), "bad noexcept!");
- }
- {
- tr2::optional<NothrowNone> n1, n2;
- static_assert(!noexcept(tr2::optional<NothrowNone>{tr2::constexpr_move(n1)}), "bad noexcept!");
- static_assert(!noexcept(n1 = tr2::constexpr_move(n2)), "bad noexcept!");
- }
-}
-
-
-void constexpr_test_disengaged()
-{
- constexpr tr2::optional<int> g0{};
- constexpr tr2::optional<int> g1{tr2::nullopt};
- static_assert( !g0, "initialized!" );
- static_assert( !g1, "initialized!" );
-
- static_assert( bool(g1) == bool(g0), "ne!" );
-
- static_assert( g1 == g0, "ne!" );
- static_assert( !(g1 != g0), "ne!" );
- static_assert( g1 >= g0, "ne!" );
- static_assert( !(g1 > g0), "ne!" );
- static_assert( g1 <= g0, "ne!" );
- static_assert( !(g1 <g0), "ne!" );
-
- static_assert( g1 == tr2::nullopt, "!" );
- static_assert( !(g1 != tr2::nullopt), "!" );
- static_assert( g1 <= tr2::nullopt, "!" );
- static_assert( !(g1 < tr2::nullopt), "!" );
- static_assert( g1 >= tr2::nullopt, "!" );
- static_assert( !(g1 > tr2::nullopt), "!" );
-
- static_assert( (tr2::nullopt == g0), "!" );
- static_assert( !(tr2::nullopt != g0), "!" );
- static_assert( (tr2::nullopt >= g0), "!" );
- static_assert( !(tr2::nullopt > g0), "!" );
- static_assert( (tr2::nullopt <= g0), "!" );
- static_assert( !(tr2::nullopt < g0), "!" );
-
- static_assert( (g1 != tr2::optional<int>(1)), "!" );
- static_assert( !(g1 == tr2::optional<int>(1)), "!" );
- static_assert( (g1 < tr2::optional<int>(1)), "!" );
- static_assert( (g1 <= tr2::optional<int>(1)), "!" );
- static_assert( !(g1 > tr2::optional<int>(1)), "!" );
- static_assert( !(g1 > tr2::optional<int>(1)), "!" );
-}
-
-
-constexpr tr2::optional<int> g0{};
-constexpr tr2::optional<int> g2{2};
-static_assert( g2, "not initialized!" );
-static_assert( *g2 == 2, "not 2!" );
-static_assert( g2 == tr2::optional<int>(2), "not 2!" );
-static_assert( g2 != g0, "eq!" );
-
-# if OPTIONAL_HAS_MOVE_ACCESSORS == 1
-static_assert( *tr2::optional<int>{3} == 3, "WTF!" );
-static_assert( tr2::optional<int>{3}.value() == 3, "WTF!" );
-static_assert( tr2::optional<int>{3}.value_or(1) == 3, "WTF!" );
-static_assert( tr2::optional<int>{}.value_or(4) == 4, "WTF!" );
-# endif
-
-constexpr tr2::optional<Combined> gc0{tr2::in_place};
-static_assert(gc0->n == 6, "WTF!");
-
-// optional refs
-int gi = 0;
-constexpr tr2::optional<int&> gori = gi;
-constexpr tr2::optional<int&> gorn{};
-constexpr int& gri = *gori;
-static_assert(gori, "WTF");
-static_assert(!gorn, "WTF");
-static_assert(gori != tr2::nullopt, "WTF");
-static_assert(gorn == tr2::nullopt, "WTF");
-static_assert(&gri == &*gori, "WTF");
-
-constexpr int gci = 1;
-constexpr tr2::optional<int const&> gorci = gci;
-constexpr tr2::optional<int const&> gorcn{};
-
-static_assert(gorcn < gorci, "WTF");
-static_assert(gorcn <= gorci, "WTF");
-static_assert(gorci == gorci, "WTF");
-static_assert(*gorci == 1, "WTF");
-static_assert(gorci == gci, "WTF");
-
-namespace constexpr_optional_ref_and_arrow
-{
- using namespace std::experimental;
- constexpr Combined c{1, 2};
- constexpr optional<Combined const&> oc = c;
- static_assert(oc, "WTF!");
- static_assert(oc->m == 1, "WTF!");
- static_assert(oc->n == 2, "WTF!");
-}
-
-#if OPTIONAL_HAS_CONSTEXPR_INIT_LIST
-
-namespace InitList
-{
- using namespace std::experimental;
-
- struct ConstInitLister
- {
- template <typename T>
- constexpr ConstInitLister(std::initializer_list<T> il) : len (il.size()) {}
- size_t len;
- };
-
- constexpr ConstInitLister CIL {2, 3, 4};
- static_assert(CIL.len == 3, "WTF!");
-
- constexpr optional<ConstInitLister> oil {in_place, {4, 5, 6, 7}};
- static_assert(oil, "WTF!");
- static_assert(oil->len == 4, "WTF!");
-}
-
-#endif // OPTIONAL_HAS_CONSTEXPR_INIT_LIST
-
-// end constexpr tests
-
-
-#include <string>
-
-
-struct VEC
-{
- std::vector<int> v;
- template <typename... X>
- VEC( X&&...x) : v(std::forward<X>(x)...) {}
-
- template <typename U, typename... X>
- VEC(std::initializer_list<U> il, X&&...x) : v(il, std::forward<X>(x)...) {}
-};
-
-
-
-int main() {
- tr2::optional<int> oi = 1;
- assert (bool(oi));
- oi.operator=({});
- assert (!oi);
-
- VEC v = {5, 6};
-
- if (OPTIONAL_HAS_THIS_RVALUE_REFS)
- std::cout << "Optional has rvalue references for *this" << std::endl;
- else
- std::cout << "Optional doesn't have rvalue references for *this" << std::endl;
-
- if (OPTIONAL_HAS_CONSTEXPR_INIT_LIST)
- std::cout << "Optional has constexpr initializer_list" << std::endl;
- else
- std::cout << "Optional doesn't have constexpr initializer_list" << std::endl;
-
- if (OPTIONAL_HAS_MOVE_ACCESSORS)
- std::cout << "Optional has constexpr move accessors" << std::endl;
- else
- std::cout << "Optional doesn't have constexpr move accessors" << std::endl;
-}
-
diff --git a/src/libs/3rdparty/optional/test_type_traits.cpp b/src/libs/3rdparty/optional/test_type_traits.cpp
deleted file mode 100644
index 8ec82b7087..0000000000
--- a/src/libs/3rdparty/optional/test_type_traits.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (C) 2011 - 2012 Andrzej Krzemienski.
-//
-// Use, modification, and distribution is subject to the Boost Software
-// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#if (defined __clang__)
- namespace std { class type_info; }
-#endif
-
-# include "optional.hpp"
-
-namespace std { namespace experimental {
-
-struct Val
-{
- Val(){}
- Val( Val const & ){}
- Val( Val && ) noexcept {}
-
- Val & operator=( Val const & ) = delete;
- Val & operator=( Val && ) noexcept = delete;
-};
-
-struct Safe
-{
- Safe(){}
- Safe( Safe const & ){}
- Safe( Safe && ) noexcept {}
-
- Safe & operator=( Safe const & ){ return *this; }
- Safe & operator=( Safe && ) noexcept { return *this; }
-};
-
-struct Unsafe
-{
- Unsafe(){}
- Unsafe( Unsafe const & ){}
- Unsafe( Unsafe && ){}
-
- Unsafe & operator=( Unsafe const & ){ return *this; }
- Unsafe & operator=( Unsafe && ) { return *this; }
-};
-
-struct VoidNothrowBoth
-{
- VoidNothrowBoth(VoidNothrowBoth&&) noexcept(true) {};
- void operator=(VoidNothrowBoth&&) noexcept(true) {}; // note void return type
-};
-
-
-static_assert(is_nothrow_move_constructible<Safe>::value, "WTF!");
-static_assert(!is_nothrow_move_constructible<Unsafe>::value, "WTF!");
-
-static_assert(is_assignable<Safe&, Safe&&>::value, "WTF!");
-static_assert(!is_assignable<Val&, Val&&>::value, "WTF!");
-
-static_assert(is_nothrow_move_assignable<Safe>::value, "WTF!");
-static_assert(!is_nothrow_move_assignable<Unsafe>::value, "WTF!");
-
-static_assert(is_nothrow_move_constructible<VoidNothrowBoth>::value, "WTF!");
-static_assert(is_nothrow_move_assignable<VoidNothrowBoth>::value, "WTF!");
-
-}} // namespace std::experimental
-
-int main() { }
diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp
index 2ac49872c1..2f52079bdc 100644
--- a/src/libs/cplusplus/FindUsages.cpp
+++ b/src/libs/cplusplus/FindUsages.cpp
@@ -16,10 +16,9 @@
#include <cplusplus/TranslationUnit.h>
#include <cplusplus/TypeOfExpression.h>
-#include <utils/optional.h>
-
#include <QDebug>
+#include <optional>
using namespace CPlusPlus;
@@ -189,8 +188,8 @@ public:
if (const auto binExpr = (*it)->asBinaryExpression()) {
if (binExpr->left_expression == *(it - 1) && isAssignment(binExpr->binary_op_token))
return checkPotentialWrite(Usage::Type::Write, it + 1);
- const Utils::optional<LookupItem> item = getTypeOfExpr(binExpr->left_expression,
- it + 1);
+ const std::optional<LookupItem> item = getTypeOfExpr(binExpr->left_expression,
+ it + 1);
if (!item)
return Usage::Type::Other;
return checkPotentialWrite(getUsageTypeFromLhsAndRhs(
@@ -349,12 +348,12 @@ private:
return m_findUsages->typeofExpression(expr, m_findUsages->_doc, scope);
}
- Utils::optional<LookupItem> getTypeOfExpr(ExpressionAST *expr, Iterator scopeSearchPos) const
+ std::optional<LookupItem> getTypeOfExpr(ExpressionAST *expr, Iterator scopeSearchPos) const
{
const QList<LookupItem> items = getTypesOfExpr(expr, scopeSearchPos);
if (items.isEmpty())
return {};
- return Utils::optional<LookupItem>(items.first());
+ return std::optional<LookupItem>(items.first());
}
Usage::Type getUsageTypeFromLhsAndRhs(const FullySpecifiedType &lhsType, ExpressionAST *rhs,
@@ -365,7 +364,7 @@ private:
return usageType;
// If the lhs has type auto, we use the RHS type.
- const Utils::optional<LookupItem> item = getTypeOfExpr(rhs, scopeSearchPos);
+ const std::optional<LookupItem> item = getTypeOfExpr(rhs, scopeSearchPos);
if (!item)
return Usage::Type::Other;
return getUsageTypeFromDataType(item->type());
@@ -385,8 +384,8 @@ private:
continue;
if (memberAccess->member_name == *(it - 1))
return Usage::Type::Other;
- const Utils::optional<LookupItem> item
- = getTypeOfExpr(memberAccess->base_expression, it);
+ const std::optional<LookupItem> item = getTypeOfExpr(memberAccess->base_expression,
+ it);
if (!item)
return Usage::Type::Other;
FullySpecifiedType baseExprType = item->type();
diff --git a/src/libs/cplusplus/MatchingText.cpp b/src/libs/cplusplus/MatchingText.cpp
index 2031b35336..bbd0e8d30a 100644
--- a/src/libs/cplusplus/MatchingText.cpp
+++ b/src/libs/cplusplus/MatchingText.cpp
@@ -13,7 +13,8 @@
#include <QDebug>
#include <utils/algorithm.h>
-#include <utils/optional.h>
+
+#include <optional>
using namespace CPlusPlus;
@@ -157,7 +158,7 @@ static bool isCursorAtEndOfLineButMaybeBeforeComment(const QTextCursor &cursor)
return Utils::allOf(tokens, [](const Token &token) { return token.isComment(); });
}
-using TokenIndexResult = Utils::optional<int>;
+using TokenIndexResult = std::optional<int>;
// 10.6.1 Attribute syntax and semantics
// This does not handle alignas() since it is not needed for the namespace case.
diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp
index 66aff60936..4ff50a12c5 100644
--- a/src/libs/extensionsystem/pluginmanager.cpp
+++ b/src/libs/extensionsystem/pluginmanager.cpp
@@ -1467,7 +1467,7 @@ public:
+ ".lock";
}
- static Utils::optional<QString> lockedPluginName(PluginManagerPrivate *pm)
+ static std::optional<QString> lockedPluginName(PluginManagerPrivate *pm)
{
const QString lockFilePath = LockFile::filePath(pm);
if (QFile::exists(lockFilePath)) {
@@ -1507,7 +1507,7 @@ void PluginManagerPrivate::checkForProblematicPlugins()
{
if (!enableCrashCheck)
return;
- const Utils::optional<QString> pluginName = LockFile::lockedPluginName(this);
+ const std::optional<QString> pluginName = LockFile::lockedPluginName(this);
if (pluginName) {
PluginSpec *spec = pluginByName(*pluginName);
if (spec && !spec->isRequired()) {
diff --git a/src/libs/extensionsystem/pluginspec_p.h b/src/libs/extensionsystem/pluginspec_p.h
index affe0b5ca9..fd7ff0de1c 100644
--- a/src/libs/extensionsystem/pluginspec_p.h
+++ b/src/libs/extensionsystem/pluginspec_p.h
@@ -6,8 +6,6 @@
#include "pluginspec.h"
#include "iplugin.h"
-#include <utils/optional.h>
-
#include <QJsonObject>
#include <QObject>
#include <QPluginLoader>
@@ -16,6 +14,8 @@
#include <QVector>
#include <QXmlStreamReader>
+#include <optional>
+
namespace ExtensionSystem {
class IPlugin;
@@ -47,8 +47,8 @@ public:
void setForceEnabled(bool value);
void setForceDisabled(bool value);
- Utils::optional<QPluginLoader> loader;
- Utils::optional<QStaticPlugin> staticPlugin;
+ std::optional<QPluginLoader> loader;
+ std::optional<QStaticPlugin> staticPlugin;
QString name;
QString version;
diff --git a/src/libs/languageserverprotocol/clientcapabilities.cpp b/src/libs/languageserverprotocol/clientcapabilities.cpp
index f92103cf35..b7c5c606bd 100644
--- a/src/libs/languageserverprotocol/clientcapabilities.cpp
+++ b/src/libs/languageserverprotocol/clientcapabilities.cpp
@@ -5,14 +5,13 @@
namespace LanguageServerProtocol {
-Utils::optional<QList<SymbolKind> > SymbolCapabilities::SymbolKindCapabilities::valueSet() const
+std::optional<QList<SymbolKind>> SymbolCapabilities::SymbolKindCapabilities::valueSet() const
{
- if (Utils::optional<QList<int>> array = optionalArray<int>(valueSetKey)) {
- return Utils::make_optional(Utils::transform(*array, [] (int value) {
- return static_cast<SymbolKind>(value);
- }));
+ if (std::optional<QList<int>> array = optionalArray<int>(valueSetKey)) {
+ return std::make_optional(
+ Utils::transform(*array, [](int value) { return static_cast<SymbolKind>(value); }));
}
- return Utils::nullopt;
+ return std::nullopt;
}
void SymbolCapabilities::SymbolKindCapabilities::setValueSet(const QList<SymbolKind> &valueSet)
@@ -25,7 +24,7 @@ WorkspaceClientCapabilities::WorkspaceClientCapabilities()
setWorkspaceFolders(true);
}
-Utils::optional<std::variant<bool, QJsonObject>> SemanticTokensClientCapabilities::Requests::range()
+std::optional<std::variant<bool, QJsonObject>> SemanticTokensClientCapabilities::Requests::range()
const
{
using RetType = std::variant<bool, QJsonObject>;
@@ -34,7 +33,7 @@ Utils::optional<std::variant<bool, QJsonObject>> SemanticTokensClientCapabilitie
return RetType(rangeOptions.toBool());
if (rangeOptions.isObject())
return RetType(rangeOptions.toObject());
- return Utils::nullopt;
+ return std::nullopt;
}
void SemanticTokensClientCapabilities::Requests::setRange(
@@ -43,7 +42,7 @@ void SemanticTokensClientCapabilities::Requests::setRange(
insertVariant<bool, QJsonObject>(rangeKey, range);
}
-Utils::optional<std::variant<bool, FullSemanticTokenOptions>>
+std::optional<std::variant<bool, FullSemanticTokenOptions>>
SemanticTokensClientCapabilities::Requests::full() const
{
using RetType = std::variant<bool, FullSemanticTokenOptions>;
@@ -52,7 +51,7 @@ SemanticTokensClientCapabilities::Requests::full() const
return RetType(fullOptions.toBool());
if (fullOptions.isObject())
return RetType(FullSemanticTokenOptions(fullOptions.toObject()));
- return Utils::nullopt;
+ return std::nullopt;
}
void SemanticTokensClientCapabilities::Requests::setFull(
@@ -61,8 +60,7 @@ void SemanticTokensClientCapabilities::Requests::setFull(
insertVariant<bool, FullSemanticTokenOptions>(fullKey, full);
}
-Utils::optional<SemanticTokensClientCapabilities> TextDocumentClientCapabilities::semanticTokens()
- const
+std::optional<SemanticTokensClientCapabilities> TextDocumentClientCapabilities::semanticTokens() const
{
return optionalValue<SemanticTokensClientCapabilities>(semanticTokensKey);
}
diff --git a/src/libs/languageserverprotocol/clientcapabilities.h b/src/libs/languageserverprotocol/clientcapabilities.h
index 4bbfaf723d..409081a230 100644
--- a/src/libs/languageserverprotocol/clientcapabilities.h
+++ b/src/libs/languageserverprotocol/clientcapabilities.h
@@ -14,7 +14,10 @@ class LANGUAGESERVERPROTOCOL_EXPORT DynamicRegistrationCapabilities : public Jso
public:
using JsonObject::JsonObject;
- Utils::optional<bool> dynamicRegistration() const { return optionalValue<bool>(dynamicRegistrationKey); }
+ std::optional<bool> dynamicRegistration() const
+ {
+ return optionalValue<bool>(dynamicRegistrationKey);
+ }
void setDynamicRegistration(bool dynamicRegistration) { insert(dynamicRegistrationKey, dynamicRegistration); }
void clearDynamicRegistration() { remove(dynamicRegistrationKey); }
};
@@ -28,7 +31,7 @@ public:
* The client will send the `textDocument/semanticTokens/full/delta`
* request if the server provides a corresponding handler.
*/
- Utils::optional<bool> delta() const { return optionalValue<bool>(deltaKey); }
+ std::optional<bool> delta() const { return optionalValue<bool>(deltaKey); }
void setDelta(bool delta) { insert(deltaKey, delta); }
void clearDelta() { remove(deltaKey); }
};
@@ -56,7 +59,7 @@ public:
* The client will send the `textDocument/semanticTokens/range` request
* if the server provides a corresponding handler.
*/
- Utils::optional<std::variant<bool, QJsonObject>> range() const;
+ std::optional<std::variant<bool, QJsonObject>> range() const;
void setRange(const std::variant<bool, QJsonObject> &range);
void clearRange() { remove(rangeKey); }
@@ -64,7 +67,7 @@ public:
* The client will send the `textDocument/semanticTokens/full` request
* if the server provides a corresponding handler.
*/
- Utils::optional<std::variant<bool, FullSemanticTokenOptions>> full() const;
+ std::optional<std::variant<bool, FullSemanticTokenOptions>> full() const;
void setFull(const std::variant<bool, FullSemanticTokenOptions> &full);
void clearFull() { remove(fullKey); }
};
@@ -85,12 +88,18 @@ public:
void setFormats(const QList<QString> &value) { insertArray(formatsKey, value); }
/// Whether the client supports tokens that can overlap each other.
- Utils::optional<bool> overlappingTokenSupport() const { return optionalValue<bool>(overlappingTokenSupportKey); }
+ std::optional<bool> overlappingTokenSupport() const
+ {
+ return optionalValue<bool>(overlappingTokenSupportKey);
+ }
void setOverlappingTokenSupport(bool overlappingTokenSupport) { insert(overlappingTokenSupportKey, overlappingTokenSupport); }
void clearOverlappingTokenSupport() { remove(overlappingTokenSupportKey); }
/// Whether the client supports tokens that can span multiple lines.
- Utils::optional<bool> multiLineTokenSupport() const { return optionalValue<bool>(multiLineTokenSupportKey); }
+ std::optional<bool> multiLineTokenSupport() const
+ {
+ return optionalValue<bool>(multiLineTokenSupportKey);
+ }
void setMultiLineTokenSupport(bool multiLineTokenSupport) { insert(multiLineTokenSupportKey, multiLineTokenSupport); }
void clearMultiLineTokenSupport() { remove(multiLineTokenSupportKey); }
@@ -117,18 +126,18 @@ public:
* the symbol kinds from `File` to `Array` as defined in
* the initial version of the protocol.
*/
- Utils::optional<QList<SymbolKind>> valueSet() const;
+ std::optional<QList<SymbolKind>> valueSet() const;
void setValueSet(const QList<SymbolKind> &valueSet);
void clearValueSet() { remove(valueSetKey); }
};
// Specific capabilities for the `SymbolKind` in the `workspace/symbol` request.
- Utils::optional<SymbolKindCapabilities> symbolKind() const
+ std::optional<SymbolKindCapabilities> symbolKind() const
{ return optionalValue<SymbolKindCapabilities>(symbolKindKey); }
void setSymbolKind(const SymbolKindCapabilities &symbolKind) { insert(symbolKindKey, symbolKind); }
void clearSymbolKind() { remove(symbolKindKey); }
- Utils::optional<bool> hierarchicalDocumentSymbolSupport() const
+ std::optional<bool> hierarchicalDocumentSymbolSupport() const
{ return optionalValue<bool>(hierarchicalDocumentSymbolSupportKey); }
void setHierarchicalDocumentSymbolSupport(bool hierarchicalDocumentSymbolSupport)
{ insert(hierarchicalDocumentSymbolSupportKey, hierarchicalDocumentSymbolSupport); }
@@ -146,7 +155,7 @@ public:
using DynamicRegistrationCapabilities::DynamicRegistrationCapabilities;
// The client supports sending will save notifications.
- Utils::optional<bool> willSave() const { return optionalValue<bool>(willSaveKey); }
+ std::optional<bool> willSave() const { return optionalValue<bool>(willSaveKey); }
void setWillSave(bool willSave) { insert(willSaveKey, willSave); }
void clearWillSave() { remove(willSaveKey); }
@@ -155,19 +164,19 @@ public:
* waits for a response providing text edits which will
* be applied to the document before it is saved.
*/
- Utils::optional<bool> willSaveWaitUntil() const
+ std::optional<bool> willSaveWaitUntil() const
{ return optionalValue<bool>(willSaveWaitUntilKey); }
void setWillSaveWaitUntil(bool willSaveWaitUntil)
{ insert(willSaveWaitUntilKey, willSaveWaitUntil); }
void clearWillSaveWaitUntil() { remove(willSaveWaitUntilKey); }
// The client supports did save notifications.
- Utils::optional<bool> didSave() const { return optionalValue<bool>(didSaveKey); }
+ std::optional<bool> didSave() const { return optionalValue<bool>(didSaveKey); }
void setDidSave(bool didSave) { insert(didSaveKey, didSave); }
void clearDidSave() { remove(didSaveKey); }
};
- Utils::optional<SynchronizationCapabilities> synchronization() const
+ std::optional<SynchronizationCapabilities> synchronization() const
{ return optionalValue<SynchronizationCapabilities>(synchronizationKey); }
void setSynchronization(const SynchronizationCapabilities &synchronization)
{ insert(synchronizationKey, synchronization); }
@@ -191,14 +200,14 @@ public:
* the end of the snippet. Placeholders with equal identifiers are linked,
* that is typing in one will update others too.
*/
- Utils::optional<bool> snippetSupport() const
+ std::optional<bool> snippetSupport() const
{ return optionalValue<bool>(snippetSupportKey); }
void setSnippetSupport(bool snippetSupport)
{ insert(snippetSupportKey, snippetSupport); }
void clearSnippetSupport() { remove(snippetSupportKey); }
// Client supports commit characters on a completion item.
- Utils::optional<bool> commitCharacterSupport() const
+ std::optional<bool> commitCharacterSupport() const
{ return optionalValue<bool>(commitCharacterSupportKey); }
void setCommitCharacterSupport(bool commitCharacterSupport)
{ insert(commitCharacterSupportKey, commitCharacterSupport); }
@@ -208,13 +217,13 @@ public:
* Client supports the follow content formats for the documentation
* property. The order describes the preferred format of the client.
*/
- Utils::optional<QList<MarkupKind>> documentationFormat() const;
+ std::optional<QList<MarkupKind>> documentationFormat() const;
void setDocumentationFormat(const QList<MarkupKind> &documentationFormat);
void clearDocumentationFormat() { remove(documentationFormatKey); }
};
// The client supports the following `CompletionItem` specific capabilities.
- Utils::optional<CompletionItemCapbilities> completionItem() const
+ std::optional<CompletionItemCapbilities> completionItem() const
{ return optionalValue<CompletionItemCapbilities>(completionItemKey); }
void setCompletionItem(const CompletionItemCapbilities &completionItem)
{ insert(completionItemKey, completionItem); }
@@ -235,12 +244,12 @@ public:
* the completion items kinds from `Text` to `Reference` as defined in
* the initial version of the protocol.
*/
- Utils::optional<QList<CompletionItemKind::Kind>> valueSet() const;
+ std::optional<QList<CompletionItemKind::Kind>> valueSet() const;
void setValueSet(const QList<CompletionItemKind::Kind> &valueSet);
void clearValueSet() { remove(valueSetKey); }
};
- Utils::optional<CompletionItemKindCapabilities> completionItemKind() const
+ std::optional<CompletionItemKindCapabilities> completionItemKind() const
{ return optionalValue<CompletionItemKindCapabilities>(completionItemKindKey); }
void setCompletionItemKind(const CompletionItemKindCapabilities &completionItemKind)
{ insert(completionItemKindKey, completionItemKind); }
@@ -250,13 +259,16 @@ public:
* The client supports to send additional context information for a
* `textDocument/completion` request.
*/
- Utils::optional<bool> contextSupport() const { return optionalValue<bool>(contextSupportKey); }
+ std::optional<bool> contextSupport() const
+ {
+ return optionalValue<bool>(contextSupportKey);
+ }
void setContextSupport(bool contextSupport) { insert(contextSupportKey, contextSupport); }
void clearContextSupport() { remove(contextSupportKey); }
};
// Capabilities specific to the `textDocument/completion`
- Utils::optional<CompletionCapabilities> completion() const
+ std::optional<CompletionCapabilities> completion() const
{ return optionalValue<CompletionCapabilities>(completionKey); }
void setCompletion(const CompletionCapabilities &completion)
{ insert(completionKey, completion); }
@@ -270,12 +282,15 @@ public:
* Client supports the follow content formats for the content
* property. The order describes the preferred format of the client.
*/
- Utils::optional<QList<MarkupKind>> contentFormat() const;
+ std::optional<QList<MarkupKind>> contentFormat() const;
void setContentFormat(const QList<MarkupKind> &contentFormat);
void clearContentFormat() { remove(contentFormatKey); }
};
- Utils::optional<HoverCapabilities> hover() const { return optionalValue<HoverCapabilities>(hoverKey); }
+ std::optional<HoverCapabilities> hover() const
+ {
+ return optionalValue<HoverCapabilities>(hoverKey);
+ }
void setHover(const HoverCapabilities &hover) { insert(hoverKey, hover); }
void clearHover() { remove(hoverKey); }
@@ -292,11 +307,11 @@ public:
* Client supports the follow content formats for the documentation
* property. The order describes the preferred format of the client.
*/
- Utils::optional<QList<MarkupKind>> documentationFormat() const;
+ std::optional<QList<MarkupKind>> documentationFormat() const;
void setDocumentationFormat(const QList<MarkupKind> &documentationFormat);
void clearDocumentationFormat() { remove(documentationFormatKey); }
- Utils::optional<bool> activeParameterSupport() const
+ std::optional<bool> activeParameterSupport() const
{ return optionalValue<bool>(activeParameterSupportKey); }
void setActiveParameterSupport(bool activeParameterSupport)
{ insert(activeParameterSupportKey, activeParameterSupport); }
@@ -304,7 +319,7 @@ public:
};
// The client supports the following `SignatureInformation` specific properties.
- Utils::optional<SignatureInformationCapabilities> signatureInformation() const
+ std::optional<SignatureInformationCapabilities> signatureInformation() const
{ return optionalValue<SignatureInformationCapabilities>(signatureInformationKey); }
void setSignatureInformation(const SignatureInformationCapabilities &signatureInformation)
{ insert(signatureInformationKey, signatureInformation); }
@@ -312,56 +327,56 @@ public:
};
// Capabilities specific to the `textDocument/signatureHelp`
- Utils::optional<SignatureHelpCapabilities> signatureHelp() const
+ std::optional<SignatureHelpCapabilities> signatureHelp() const
{ return optionalValue<SignatureHelpCapabilities>(signatureHelpKey); }
void setSignatureHelp(const SignatureHelpCapabilities &signatureHelp)
{ insert(signatureHelpKey, signatureHelp); }
void clearSignatureHelp() { remove(signatureHelpKey); }
// Whether references supports dynamic registration.
- Utils::optional<DynamicRegistrationCapabilities> references() const
+ std::optional<DynamicRegistrationCapabilities> references() const
{ return optionalValue<DynamicRegistrationCapabilities>(referencesKey); }
void setReferences(const DynamicRegistrationCapabilities &references)
{ insert(referencesKey, references); }
void clearReferences() { remove(referencesKey); }
// Whether document highlight supports dynamic registration.
- Utils::optional<DynamicRegistrationCapabilities> documentHighlight() const
+ std::optional<DynamicRegistrationCapabilities> documentHighlight() const
{ return optionalValue<DynamicRegistrationCapabilities>(documentHighlightKey); }
void setDocumentHighlight(const DynamicRegistrationCapabilities &documentHighlight)
{ insert(documentHighlightKey, documentHighlight); }
void clearDocumentHighlight() { remove(documentHighlightKey); }
// Capabilities specific to the `textDocument/documentSymbol`
- Utils::optional<SymbolCapabilities> documentSymbol() const
+ std::optional<SymbolCapabilities> documentSymbol() const
{ return optionalValue<SymbolCapabilities>(documentSymbolKey); }
void setDocumentSymbol(const SymbolCapabilities &documentSymbol)
{ insert(documentSymbolKey, documentSymbol); }
void clearDocumentSymbol() { remove(documentSymbolKey); }
// Whether formatting supports dynamic registration.
- Utils::optional<DynamicRegistrationCapabilities> formatting() const
+ std::optional<DynamicRegistrationCapabilities> formatting() const
{ return optionalValue<DynamicRegistrationCapabilities>(formattingKey); }
void setFormatting(const DynamicRegistrationCapabilities &formatting)
{ insert(formattingKey, formatting); }
void clearFormatting() { remove(formattingKey); }
// Whether range formatting supports dynamic registration.
- Utils::optional<DynamicRegistrationCapabilities> rangeFormatting() const
+ std::optional<DynamicRegistrationCapabilities> rangeFormatting() const
{ return optionalValue<DynamicRegistrationCapabilities>(rangeFormattingKey); }
void setRangeFormatting(const DynamicRegistrationCapabilities &rangeFormatting)
{ insert(rangeFormattingKey, rangeFormatting); }
void clearRangeFormatting() { remove(rangeFormattingKey); }
// Whether on type formatting supports dynamic registration.
- Utils::optional<DynamicRegistrationCapabilities> onTypeFormatting() const
+ std::optional<DynamicRegistrationCapabilities> onTypeFormatting() const
{ return optionalValue<DynamicRegistrationCapabilities>(onTypeFormattingKey); }
void setOnTypeFormatting(const DynamicRegistrationCapabilities &onTypeFormatting)
{ insert(onTypeFormattingKey, onTypeFormatting); }
void clearOnTypeFormatting() { remove(onTypeFormattingKey); }
// Whether definition supports dynamic registration.
- Utils::optional<DynamicRegistrationCapabilities> definition() const
+ std::optional<DynamicRegistrationCapabilities> definition() const
{ return optionalValue<DynamicRegistrationCapabilities>(definitionKey); }
void setDefinition(const DynamicRegistrationCapabilities &definition)
{ insert(definitionKey, definition); }
@@ -372,7 +387,7 @@ public:
* the client supports the new `(TextDocumentRegistrationOptions & StaticRegistrationOptions)`
* return value for the corresponding server capability as well.
*/
- Utils::optional<DynamicRegistrationCapabilities> typeDefinition() const
+ std::optional<DynamicRegistrationCapabilities> typeDefinition() const
{ return optionalValue<DynamicRegistrationCapabilities>(typeDefinitionKey); }
void setTypeDefinition(const DynamicRegistrationCapabilities &typeDefinition)
{ insert(typeDefinitionKey, typeDefinition); }
@@ -383,7 +398,7 @@ public:
* the client supports the new `(TextDocumentRegistrationOptions & StaticRegistrationOptions)`
* return value for the corresponding server capability as well.
*/
- Utils::optional<DynamicRegistrationCapabilities> implementation() const
+ std::optional<DynamicRegistrationCapabilities> implementation() const
{ return optionalValue<DynamicRegistrationCapabilities>(implementationKey); }
void setImplementation(const DynamicRegistrationCapabilities &implementation)
{ insert(implementationKey, implementation); }
@@ -421,7 +436,7 @@ public:
bool isValid() const override { return contains(codeActionKindKey); }
};
- Utils::optional<CodeActionLiteralSupport> codeActionLiteralSupport() const
+ std::optional<CodeActionLiteralSupport> codeActionLiteralSupport() const
{ return optionalValue<CodeActionLiteralSupport>(codeActionLiteralSupportKey); }
void setCodeActionLiteralSupport(const CodeActionLiteralSupport &codeActionLiteralSupport)
{ insert(codeActionLiteralSupportKey, codeActionLiteralSupport); }
@@ -429,21 +444,21 @@ public:
};
// Whether code action supports dynamic registration.
- Utils::optional<CodeActionCapabilities> codeAction() const
+ std::optional<CodeActionCapabilities> codeAction() const
{ return optionalValue<CodeActionCapabilities>(codeActionKey); }
void setCodeAction(const CodeActionCapabilities &codeAction)
{ insert(codeActionKey, codeAction); }
void clearCodeAction() { remove(codeActionKey); }
// Whether code lens supports dynamic registration.
- Utils::optional<DynamicRegistrationCapabilities> codeLens() const
+ std::optional<DynamicRegistrationCapabilities> codeLens() const
{ return optionalValue<DynamicRegistrationCapabilities>(codeLensKey); }
void setCodeLens(const DynamicRegistrationCapabilities &codeLens)
{ insert(codeLensKey, codeLens); }
void clearCodeLens() { remove(codeLensKey); }
// Whether document link supports dynamic registration.
- Utils::optional<DynamicRegistrationCapabilities> documentLink() const
+ std::optional<DynamicRegistrationCapabilities> documentLink() const
{ return optionalValue<DynamicRegistrationCapabilities>(documentLinkKey); }
void setDocumentLink(const DynamicRegistrationCapabilities &documentLink)
{ insert(documentLinkKey, documentLink); }
@@ -454,7 +469,7 @@ public:
* the client supports the new `(ColorProviderOptions & TextDocumentRegistrationOptions & StaticRegistrationOptions)`
* return value for the corresponding server capability as well.
*/
- Utils::optional<DynamicRegistrationCapabilities> colorProvider() const
+ std::optional<DynamicRegistrationCapabilities> colorProvider() const
{ return optionalValue<DynamicRegistrationCapabilities>(colorProviderKey); }
void setColorProvider(const DynamicRegistrationCapabilities &colorProvider)
{ insert(colorProviderKey, colorProvider); }
@@ -471,19 +486,22 @@ public:
* @since version 3.12.0
*/
- Utils::optional<bool> prepareSupport() const { return optionalValue<bool>(prepareSupportKey); }
+ std::optional<bool> prepareSupport() const
+ {
+ return optionalValue<bool>(prepareSupportKey);
+ }
void setPrepareSupport(bool prepareSupport) { insert(prepareSupportKey, prepareSupport); }
void clearPrepareSupport() { remove(prepareSupportKey); }
};
// Whether rename supports dynamic registration.
- Utils::optional<RenameClientCapabilities> rename() const
+ std::optional<RenameClientCapabilities> rename() const
{ return optionalValue<RenameClientCapabilities>(renameKey); }
void setRename(const RenameClientCapabilities &rename)
{ insert(renameKey, rename); }
void clearRename() { remove(renameKey); }
- Utils::optional<SemanticTokensClientCapabilities> semanticTokens() const;
+ std::optional<SemanticTokensClientCapabilities> semanticTokens() const;
void setSemanticTokens(const SemanticTokensClientCapabilities &semanticTokens);
void clearSemanticTokens() { remove(semanticTokensKey); }
};
@@ -501,7 +519,7 @@ public:
* and is useful for situation where a server for example detect a project
* wide change that requires such a calculation.
*/
- Utils::optional<bool> refreshSupport() const { return optionalValue<bool>(refreshSupportKey); }
+ std::optional<bool> refreshSupport() const { return optionalValue<bool>(refreshSupportKey); }
void setRefreshSupport(bool refreshSupport) { insert(refreshSupportKey, refreshSupport); }
void clearRefreshSupport() { remove(refreshSupportKey); }
};
@@ -516,7 +534,7 @@ public:
* The client supports applying batch edits to the workspace by supporting the request
* 'workspace/applyEdit'
*/
- Utils::optional<bool> applyEdit() const { return optionalValue<bool>(applyEditKey); }
+ std::optional<bool> applyEdit() const { return optionalValue<bool>(applyEditKey); }
void setApplyEdit(bool applyEdit) { insert(applyEditKey, applyEdit); }
void clearApplyEdit() { remove(applyEditKey); }
@@ -526,7 +544,7 @@ public:
using JsonObject::JsonObject;
// The client supports versioned document changes in `WorkspaceEdit`s
- Utils::optional<bool> documentChanges() const
+ std::optional<bool> documentChanges() const
{ return optionalValue<bool>(documentChangesKey); }
void setDocumentChanges(bool documentChanges)
{ insert(documentChangesKey, documentChanges); }
@@ -534,52 +552,52 @@ public:
};
// Capabilities specific to `WorkspaceEdit`s
- Utils::optional<WorkspaceEditCapabilities> workspaceEdit() const
+ std::optional<WorkspaceEditCapabilities> workspaceEdit() const
{ return optionalValue<WorkspaceEditCapabilities>(workspaceEditKey); }
void setWorkspaceEdit(const WorkspaceEditCapabilities &workspaceEdit)
{ insert(workspaceEditKey, workspaceEdit); }
void clearWorkspaceEdit() { remove(workspaceEditKey); }
// Capabilities specific to the `workspace/didChangeConfiguration` notification.
- Utils::optional<DynamicRegistrationCapabilities> didChangeConfiguration() const
+ std::optional<DynamicRegistrationCapabilities> didChangeConfiguration() const
{ return optionalValue<DynamicRegistrationCapabilities>(didChangeConfigurationKey); }
void setDidChangeConfiguration(const DynamicRegistrationCapabilities &didChangeConfiguration)
{ insert(didChangeConfigurationKey, didChangeConfiguration); }
void clearDidChangeConfiguration() { remove(didChangeConfigurationKey); }
// Capabilities specific to the `workspace/didChangeWatchedFiles` notification.
- Utils::optional<DynamicRegistrationCapabilities> didChangeWatchedFiles() const
+ std::optional<DynamicRegistrationCapabilities> didChangeWatchedFiles() const
{ return optionalValue<DynamicRegistrationCapabilities>(didChangeWatchedFilesKey); }
void setDidChangeWatchedFiles(const DynamicRegistrationCapabilities &didChangeWatchedFiles)
{ insert(didChangeWatchedFilesKey, didChangeWatchedFiles); }
void clearDidChangeWatchedFiles() { remove(didChangeWatchedFilesKey); }
// Specific capabilities for the `SymbolKind` in the `workspace/symbol` request.
- Utils::optional<SymbolCapabilities> symbol() const
+ std::optional<SymbolCapabilities> symbol() const
{ return optionalValue<SymbolCapabilities>(symbolKey); }
void setSymbol(const SymbolCapabilities &symbol) { insert(symbolKey, symbol); }
void clearSymbol() { remove(symbolKey); }
// Capabilities specific to the `workspace/executeCommand` request.
- Utils::optional<DynamicRegistrationCapabilities> executeCommand() const
+ std::optional<DynamicRegistrationCapabilities> executeCommand() const
{ return optionalValue<DynamicRegistrationCapabilities>(executeCommandKey); }
void setExecuteCommand(const DynamicRegistrationCapabilities &executeCommand)
{ insert(executeCommandKey, executeCommand); }
void clearExecuteCommand() { remove(executeCommandKey); }
// The client has support for workspace folders. Since 3.6.0
- Utils::optional<bool> workspaceFolders() const
+ std::optional<bool> workspaceFolders() const
{ return optionalValue<bool>(workspaceFoldersKey); }
void setWorkspaceFolders(bool workspaceFolders)
{ insert(workspaceFoldersKey, workspaceFolders); }
void clearWorkspaceFolders() { remove(workspaceFoldersKey); }
// The client supports `workspace/configuration` requests. Since 3.6.0
- Utils::optional<bool> configuration() const { return optionalValue<bool>(configurationKey); }
+ std::optional<bool> configuration() const { return optionalValue<bool>(configurationKey); }
void setConfiguration(bool configuration) { insert(configurationKey, configuration); }
void clearConfiguration() { remove(configurationKey); }
- Utils::optional<SemanticTokensWorkspaceClientCapabilities> semanticTokens() const
+ std::optional<SemanticTokensWorkspaceClientCapabilities> semanticTokens() const
{ return optionalValue<SemanticTokensWorkspaceClientCapabilities>(semanticTokensKey); }
void setSemanticTokens(const SemanticTokensWorkspaceClientCapabilities &semanticTokens)
{ insert(semanticTokensKey, semanticTokens); }
@@ -597,7 +615,7 @@ public:
* in the request specific server capabilities.
*
*/
- Utils::optional<bool> workDoneProgress() const
+ std::optional<bool> workDoneProgress() const
{ return optionalValue<bool>(workDoneProgressKey); }
void setWorkDoneProgress(bool workDoneProgress)
{ insert(workDoneProgressKey, workDoneProgress); }
@@ -613,21 +631,21 @@ public:
using JsonObject::JsonObject;
// Workspace specific client capabilities.
- Utils::optional<WorkspaceClientCapabilities> workspace() const
+ std::optional<WorkspaceClientCapabilities> workspace() const
{ return optionalValue<WorkspaceClientCapabilities>(workspaceKey); }
void setWorkspace(const WorkspaceClientCapabilities &workspace)
{ insert(workspaceKey, workspace); }
void clearWorkspace() { remove(workspaceKey); }
// Text document specific client capabilities.
- Utils::optional<TextDocumentClientCapabilities> textDocument() const
+ std::optional<TextDocumentClientCapabilities> textDocument() const
{ return optionalValue<TextDocumentClientCapabilities>(textDocumentKey); }
void setTextDocument(const TextDocumentClientCapabilities &textDocument)
{ insert(textDocumentKey, textDocument); }
void clearTextDocument() { remove(textDocumentKey); }
// Window specific client capabilities.
- Utils::optional<WindowClientClientCapabilities> window() const
+ std::optional<WindowClientClientCapabilities> window() const
{ return optionalValue<WindowClientClientCapabilities>(windowKey); }
void setWindow(const WindowClientClientCapabilities &window)
{ insert(windowKey, window); }
diff --git a/src/libs/languageserverprotocol/completion.cpp b/src/libs/languageserverprotocol/completion.cpp
index 99e204ccd7..543abb9cfc 100644
--- a/src/libs/languageserverprotocol/completion.cpp
+++ b/src/libs/languageserverprotocol/completion.cpp
@@ -12,22 +12,22 @@ CompletionRequest::CompletionRequest(const CompletionParams &params)
: Request(methodName, params)
{ }
-Utils::optional<MarkupOrString> CompletionItem::documentation() const
+std::optional<MarkupOrString> CompletionItem::documentation() const
{
QJsonValue documentation = value(documentationKey);
if (documentation.isUndefined())
- return Utils::nullopt;
+ return std::nullopt;
return MarkupOrString(documentation);
}
-Utils::optional<CompletionItem::InsertTextFormat> CompletionItem::insertTextFormat() const
+std::optional<CompletionItem::InsertTextFormat> CompletionItem::insertTextFormat() const
{
- if (Utils::optional<int> value = optionalValue<int>(insertTextFormatKey))
- return Utils::make_optional(CompletionItem::InsertTextFormat(*value));
- return Utils::nullopt;
+ if (std::optional<int> value = optionalValue<int>(insertTextFormatKey))
+ return std::make_optional(CompletionItem::InsertTextFormat(*value));
+ return std::nullopt;
}
-Utils::optional<QList<CompletionItem::CompletionItemTag>> CompletionItem::tags() const
+std::optional<QList<CompletionItem::CompletionItemTag>> CompletionItem::tags() const
{
if (const auto value = optionalValue<QJsonArray>(tagsKey)) {
QList<CompletionItemTag> tags;
diff --git a/src/libs/languageserverprotocol/completion.h b/src/libs/languageserverprotocol/completion.h
index 6e623acaca..9537df5538 100644
--- a/src/libs/languageserverprotocol/completion.h
+++ b/src/libs/languageserverprotocol/completion.h
@@ -43,7 +43,7 @@ public:
* The trigger character (a single character) that has trigger code complete.
* Is undefined if `triggerKind !== CompletionTriggerKind.TriggerCharacter`
*/
- Utils::optional<QString> triggerCharacter() const
+ std::optional<QString> triggerCharacter() const
{ return optionalValue<QString>(triggerCharacterKey); }
void setTriggerCharacter(const QString &triggerCharacter)
{ insert(triggerCharacterKey, triggerCharacter); }
@@ -56,7 +56,7 @@ public:
* The completion context. This is only available it the client specifies
* to send this using `ClientCapabilities.textDocument.completion.contextSupport === true`
*/
- Utils::optional<CompletionContext> context() const
+ std::optional<CompletionContext> context() const
{ return optionalValue<CompletionContext>(contextKey); }
void setContext(const CompletionContext &context)
{ insert(contextKey, context); }
@@ -79,30 +79,30 @@ public:
void setLabel(const QString &label) { insert(labelKey, label); }
/// The kind of this completion item. Based of the kind an icon is chosen by the editor.
- Utils::optional<int> kind() const { return optionalValue<int>(kindKey); }
+ std::optional<int> kind() const { return optionalValue<int>(kindKey); }
void setKind(int kind) { insert(kindKey, kind); }
void clearKind() { remove(kindKey); }
/// A human-readable string with additional information about this item, like type information.
- Utils::optional<QString> detail() const { return optionalValue<QString>(detailKey); }
+ std::optional<QString> detail() const { return optionalValue<QString>(detailKey); }
void setDetail(const QString &detail) { insert(detailKey, detail); }
void clearDetail() { remove(detailKey); }
/// A human-readable string that represents a doc-comment.
- Utils::optional<MarkupOrString> documentation() const;
+ std::optional<MarkupOrString> documentation() const;
void setDocumentation(const MarkupOrString &documentation)
{ insert(documentationKey, documentation.toJson()); }
void cleatDocumentation() { remove(documentationKey); }
/// A string that should be used when comparing this item
/// with other items. When `falsy` the label is used.
- Utils::optional<QString> sortText() const { return optionalValue<QString>(sortTextKey); }
+ std::optional<QString> sortText() const { return optionalValue<QString>(sortTextKey); }
void setSortText(const QString &sortText) { insert(sortTextKey, sortText); }
void clearSortText() { remove(sortTextKey); }
/// A string that should be used when filtering a set of
/// completion items. When `falsy` the label is used.
- Utils::optional<QString> filterText() const { return optionalValue<QString>(filterTextKey); }
+ std::optional<QString> filterText() const { return optionalValue<QString>(filterTextKey); }
void setFilterText(const QString &filterText) { insert(filterTextKey, filterText); }
void clearFilterText() { remove(filterTextKey); }
@@ -119,7 +119,7 @@ public:
*
* @deprecated Use textEdit instead.
*/
- Utils::optional<QString> insertText() const { return optionalValue<QString>(insertTextKey); }
+ std::optional<QString> insertText() const { return optionalValue<QString>(insertTextKey); }
void setInsertText(const QString &insertText) { insert(insertTextKey, insertText); }
void clearInsertText() { remove(insertTextKey); }
@@ -140,7 +140,7 @@ public:
/// The format of the insert text. The format applies to both the `insertText` property
/// and the `newText` property of a provided `textEdit`.
- Utils::optional<InsertTextFormat> insertTextFormat() const;
+ std::optional<InsertTextFormat> insertTextFormat() const;
void setInsertTextFormat(const InsertTextFormat &insertTextFormat)
{ insert(insertTextFormatKey, insertTextFormat); }
void clearInsertTextFormat() { remove(insertTextFormatKey); }
@@ -152,7 +152,7 @@ public:
* *Note:* The range of the edit must be a single line range and it must contain the position at which completion
* has been requested.
*/
- Utils::optional<TextEdit> textEdit() const { return optionalValue<TextEdit>(textEditKey); }
+ std::optional<TextEdit> textEdit() const { return optionalValue<TextEdit>(textEditKey); }
void setTextEdit(const TextEdit &textEdit) { insert(textEditKey, textEdit); }
void clearTextEdit() { remove(textEditKey); }
@@ -161,7 +161,7 @@ public:
* selecting this completion. Edits must not overlap with the main edit
* nor with themselves.
*/
- Utils::optional<QList<TextEdit>> additionalTextEdits() const
+ std::optional<QList<TextEdit>> additionalTextEdits() const
{ return optionalArray<TextEdit>(additionalTextEditsKey); }
void setAdditionalTextEdits(const QList<TextEdit> &additionalTextEdits)
{ insertArray(additionalTextEditsKey, additionalTextEdits); }
@@ -172,7 +172,7 @@ public:
* then type that character. *Note* that all commit characters should have `length=1` and that superfluous
* characters will be ignored.
*/
- Utils::optional<QList<QString>> commitCharacters() const
+ std::optional<QList<QString>> commitCharacters() const
{ return optionalArray<QString>(commitCharactersKey); }
void setCommitCharacters(const QList<QString> &commitCharacters)
{ insertArray(commitCharactersKey, commitCharacters); }
@@ -183,7 +183,7 @@ public:
* additional modifications to the current document should be described with the
* additionalTextEdits-property.
*/
- Utils::optional<Command> command() const { return optionalValue<Command>(commandKey); }
+ std::optional<Command> command() const { return optionalValue<Command>(commandKey); }
void setCommand(const Command &command) { insert(commandKey, command); }
void clearCommand() { remove(commandKey); }
@@ -191,7 +191,7 @@ public:
* An data entry field that is preserved on a completion item between
* a completion and a completion resolve request.
*/
- Utils::optional<QJsonValue> data() const { return optionalValue<QJsonValue>(dataKey); }
+ std::optional<QJsonValue> data() const { return optionalValue<QJsonValue>(dataKey); }
void setData(const QJsonValue &data) { insert(dataKey, data); }
void clearData() { remove(dataKey); }
@@ -208,13 +208,13 @@ public:
* Tags for this completion item.
* @since 3.15.0
*/
- Utils::optional<QList<CompletionItemTag>> tags() const;
+ std::optional<QList<CompletionItemTag>> tags() const;
/**
* Indicates if this item is deprecated.
* @deprecated Use `tags` instead if supported.
*/
- Utils::optional<bool> deprecated() const { return optionalValue<bool>(deprecatedKey); }
+ std::optional<bool> deprecated() const { return optionalValue<bool>(deprecatedKey); }
bool isValid() const override { return contains(labelKey); }
};
@@ -232,7 +232,7 @@ public:
void setIsIncomplete(bool isIncomplete) { insert(isIncompleteKey, isIncomplete); }
/// The completion items.
- Utils::optional<QList<CompletionItem>> items() const { return array<CompletionItem>(itemsKey); }
+ std::optional<QList<CompletionItem>> items() const { return array<CompletionItem>(itemsKey); }
void setItems(const QList<CompletionItem> &items) { insertArray(itemsKey, items); }
void clearItems() { remove(itemsKey); }
diff --git a/src/libs/languageserverprotocol/diagnostics.h b/src/libs/languageserverprotocol/diagnostics.h
index 181172e875..f13cdac786 100644
--- a/src/libs/languageserverprotocol/diagnostics.h
+++ b/src/libs/languageserverprotocol/diagnostics.h
@@ -20,7 +20,7 @@ public:
void setDiagnostics(const QList<Diagnostic> &diagnostics)
{ insertArray(diagnosticsKey, diagnostics); }
- Utils::optional<int> version() const { return optionalValue<int>(versionKey); }
+ std::optional<int> version() const { return optionalValue<int>(versionKey); }
void setVersion(int version) { insert(versionKey, version); }
void clearVersion() { remove(versionKey); }
diff --git a/src/libs/languageserverprotocol/initializemessages.cpp b/src/libs/languageserverprotocol/initializemessages.cpp
index 288d7efc5d..4b6df50cfd 100644
--- a/src/libs/languageserverprotocol/initializemessages.cpp
+++ b/src/libs/languageserverprotocol/initializemessages.cpp
@@ -32,7 +32,7 @@ QString Trace::toString() const
}
#undef RETURN_CASE
-Utils::optional<QList<MarkupKind>>
+std::optional<QList<MarkupKind>>
TextDocumentClientCapabilities::CompletionCapabilities::CompletionItemCapbilities::
documentationFormat() const
{
@@ -59,16 +59,16 @@ TextDocumentClientCapabilities::CompletionCapabilities::CompletionItemKindCapabi
CompletionItemKind::TypeParameter});
}
-Utils::optional<QList<CompletionItemKind::Kind>>
+std::optional<QList<CompletionItemKind::Kind>>
TextDocumentClientCapabilities::CompletionCapabilities::CompletionItemKindCapabilities::
valueSet() const
{
- if (Utils::optional<QList<int>> array = optionalArray<int>(valueSetKey)) {
- return Utils::make_optional(Utils::transform(*array, [] (int value) {
+ if (std::optional<QList<int>> array = optionalArray<int>(valueSetKey)) {
+ return std::make_optional(Utils::transform(*array, [](int value) {
return static_cast<CompletionItemKind::Kind>(value);
}));
}
- return Utils::nullopt;
+ return std::nullopt;
}
void
@@ -78,7 +78,7 @@ setValueSet(const QList<CompletionItemKind::Kind> &valueSet)
insert(valueSetKey, enumArrayToJsonArray<CompletionItemKind::Kind>(valueSet));
}
-Utils::optional<QList<MarkupKind> > TextDocumentClientCapabilities::HoverCapabilities::contentFormat() const
+std::optional<QList<MarkupKind> > TextDocumentClientCapabilities::HoverCapabilities::contentFormat() const
{
return optionalArray<MarkupKind>(contentFormatKey);
}
@@ -88,7 +88,7 @@ void TextDocumentClientCapabilities::HoverCapabilities::setContentFormat(const Q
insertArray(contentFormatKey, contentFormat);
}
-Utils::optional<QList<MarkupKind>>
+std::optional<QList<MarkupKind>>
TextDocumentClientCapabilities::SignatureHelpCapabilities::SignatureInformationCapabilities::
documentationFormat() const
{
@@ -110,20 +110,20 @@ InitializeParams::InitializeParams()
setTrace(s_trace);
}
-Utils::optional<QJsonObject> InitializeParams::initializationOptions() const
+std::optional<QJsonObject> InitializeParams::initializationOptions() const
{
const QJsonValue &optionsValue = value(initializationOptionsKey);
if (optionsValue.isObject())
return optionsValue.toObject();
- return Utils::nullopt;
+ return std::nullopt;
}
-Utils::optional<Trace> InitializeParams::trace() const
+std::optional<Trace> InitializeParams::trace() const
{
const QJsonValue &traceValue = value(traceKey);
if (traceValue.isUndefined())
- return Utils::nullopt;
- return Utils::make_optional(Trace(traceValue.toString()));
+ return std::nullopt;
+ return std::make_optional(Trace(traceValue.toString()));
}
InitializeRequest::InitializeRequest(const InitializeParams &params)
diff --git a/src/libs/languageserverprotocol/initializemessages.h b/src/libs/languageserverprotocol/initializemessages.h
index 29e924e6c9..3573cdd817 100644
--- a/src/libs/languageserverprotocol/initializemessages.h
+++ b/src/libs/languageserverprotocol/initializemessages.h
@@ -39,7 +39,7 @@ public:
QString name() const { return typedValue<QString>(nameKey); }
void setName(const QString &name) { insert(nameKey, name); }
- Utils::optional<QString> version() const { return optionalValue<QString>(versionKey); }
+ std::optional<QString> version() const { return optionalValue<QString>(versionKey); }
void setVersion(const QString &version) { insert(versionKey, version); }
void clearVersion() { remove(versionKey); }
};
@@ -65,7 +65,7 @@ public:
*
* @deprecated in favor of rootUri.
*/
- Utils::optional<LanguageClientValue<QString>> rootPath() const
+ std::optional<LanguageClientValue<QString>> rootPath() const
{ return optionalClientValue<QString>(rootPathKey); }
void setRootPath(const LanguageClientValue<QString> &path)
{ insert(rootPathKey, path); }
@@ -82,7 +82,7 @@ public:
{ insert(rootUriKey, uri); }
// User provided initialization options.
- Utils::optional<QJsonObject> initializationOptions() const;
+ std::optional<QJsonObject> initializationOptions() const;
void setInitializationOptions(const QJsonObject &options)
{ insert(initializationOptionsKey, options); }
void clearInitializationOptions() { remove(initializationOptionsKey); }
@@ -93,7 +93,7 @@ public:
{ insert(capabilitiesKey, capabilities); }
// The initial trace setting. If omitted trace is disabled ('off').
- Utils::optional<Trace> trace() const;
+ std::optional<Trace> trace() const;
void setTrace(Trace trace) { insert(traceKey, trace.toString()); }
void clearTrace() { remove(traceKey); }
@@ -105,13 +105,13 @@ public:
*
* Since 3.6.0
*/
- Utils::optional<LanguageClientArray<WorkSpaceFolder>> workspaceFolders() const
+ std::optional<LanguageClientArray<WorkSpaceFolder>> workspaceFolders() const
{ return optionalClientArray<WorkSpaceFolder>(workspaceFoldersKey); }
void setWorkSpaceFolders(const LanguageClientArray<WorkSpaceFolder> &folders)
{ insert(workspaceFoldersKey, folders.toJson()); }
void clearWorkSpaceFolders() { remove(workspaceFoldersKey); }
- Utils::optional<ClientInfo> clientInfo() const { return optionalValue<ClientInfo>(clientInfoKey); }
+ std::optional<ClientInfo> clientInfo() const { return optionalValue<ClientInfo>(clientInfoKey); }
void setClientInfo(const ClientInfo &clientInfo) { insert(clientInfoKey, clientInfo); }
void clearClientInfo() { remove(clientInfoKey); }
@@ -137,7 +137,7 @@ public:
using JsonObject::JsonObject;
QString name() const { return typedValue<QString>(nameKey); }
- Utils::optional<QString> version() const { return optionalValue<QString>(versionKey); }
+ std::optional<QString> version() const { return optionalValue<QString>(versionKey); }
bool isValid() const override { return contains(nameKey); }
};
@@ -152,7 +152,7 @@ public:
void setCapabilities(const ServerCapabilities &capabilities)
{ insert(capabilitiesKey, capabilities); }
- Utils::optional<ServerInfo> serverInfo() const
+ std::optional<ServerInfo> serverInfo() const
{ return optionalValue<ServerInfo>(serverInfoKey); }
bool isValid() const override { return contains(capabilitiesKey); }
diff --git a/src/libs/languageserverprotocol/jsonobject.h b/src/libs/languageserverprotocol/jsonobject.h
index cde35b1863..1d04634fea 100644
--- a/src/libs/languageserverprotocol/jsonobject.h
+++ b/src/libs/languageserverprotocol/jsonobject.h
@@ -65,19 +65,19 @@ protected:
template<typename T>
T typedValue(const QStringView key) const;
template<typename T>
- Utils::optional<T> optionalValue(const QStringView key) const;
+ std::optional<T> optionalValue(const QStringView key) const;
template<typename T>
LanguageClientValue<T> clientValue(const QStringView key) const;
template<typename T>
- Utils::optional<LanguageClientValue<T>> optionalClientValue(const QStringView key) const;
+ std::optional<LanguageClientValue<T>> optionalClientValue(const QStringView key) const;
template<typename T>
QList<T> array(const QStringView key) const;
template<typename T>
- Utils::optional<QList<T>> optionalArray(const QStringView key) const;
+ std::optional<QList<T>> optionalArray(const QStringView key) const;
template<typename T>
LanguageClientArray<T> clientArray(const QStringView key) const;
template<typename T>
- Utils::optional<LanguageClientArray<T>> optionalClientArray(const QStringView key) const;
+ std::optional<LanguageClientArray<T>> optionalClientArray(const QStringView key) const;
template<typename T>
void insertArray(const QStringView key, const QList<T> &array);
template<typename>
@@ -107,10 +107,10 @@ T JsonObject::typedValue(const QStringView key) const
}
template<typename T>
-Utils::optional<T> JsonObject::optionalValue(const QStringView key) const
+std::optional<T> JsonObject::optionalValue(const QStringView key) const
{
const QJsonValue &val = value(key);
- return val.isUndefined() ? Utils::nullopt : Utils::make_optional(fromJsonValue<T>(val));
+ return val.isUndefined() ? std::nullopt : std::make_optional(fromJsonValue<T>(val));
}
template<typename T>
@@ -120,26 +120,26 @@ LanguageClientValue<T> JsonObject::clientValue(const QStringView key) const
}
template<typename T>
-Utils::optional<LanguageClientValue<T>> JsonObject::optionalClientValue(const QStringView key) const
+std::optional<LanguageClientValue<T>> JsonObject::optionalClientValue(const QStringView key) const
{
- return contains(key) ? Utils::make_optional(clientValue<T>(key)) : Utils::nullopt;
+ return contains(key) ? std::make_optional(clientValue<T>(key)) : std::nullopt;
}
template<typename T>
QList<T> JsonObject::array(const QStringView key) const
{
- if (const Utils::optional<QList<T>> &array = optionalArray<T>(key))
+ if (const std::optional<QList<T>> &array = optionalArray<T>(key))
return *array;
qCDebug(conversionLog) << QString("Expected array under %1 in:").arg(key) << *this;
return {};
}
template<typename T>
-Utils::optional<QList<T>> JsonObject::optionalArray(const QStringView key) const
+std::optional<QList<T>> JsonObject::optionalArray(const QStringView key) const
{
const QJsonValue &jsonValue = value(key);
if (jsonValue.isUndefined())
- return Utils::nullopt;
+ return std::nullopt;
return Utils::transform<QList<T>>(jsonValue.toArray(), &fromJsonValue<T>);
}
@@ -150,11 +150,11 @@ LanguageClientArray<T> JsonObject::clientArray(const QStringView key) const
}
template<typename T>
-Utils::optional<LanguageClientArray<T>> JsonObject::optionalClientArray(const QStringView key) const
+std::optional<LanguageClientArray<T>> JsonObject::optionalClientArray(const QStringView key) const
{
const QJsonValue &val = value(key);
- return !val.isUndefined() ? Utils::make_optional(LanguageClientArray<T>(value(key)))
- : Utils::nullopt;
+ return !val.isUndefined() ? std::make_optional(LanguageClientArray<T>(value(key)))
+ : std::nullopt;
}
template<typename T>
diff --git a/src/libs/languageserverprotocol/jsonrpcmessages.h b/src/libs/languageserverprotocol/jsonrpcmessages.h
index 927647db60..3886dcbc9e 100644
--- a/src/libs/languageserverprotocol/jsonrpcmessages.h
+++ b/src/libs/languageserverprotocol/jsonrpcmessages.h
@@ -7,7 +7,6 @@
#include "lsptypes.h"
#include "jsonkeys.h"
-#include <utils/optional.h>
#include <utils/qtcassert.h>
#include <QDebug>
@@ -18,6 +17,7 @@
#include <QCoreApplication>
#include <QUuid>
+#include <optional>
#include <variant>
namespace LanguageServerProtocol {
@@ -112,8 +112,7 @@ public:
const QString parseError() { return m_parseError; }
- virtual Utils::optional<ResponseHandler> responseHandler() const
- { return Utils::nullopt; }
+ virtual std::optional<ResponseHandler> responseHandler() const { return std::nullopt; }
BaseMessage toBaseMessage() const
{ return BaseMessage(jsonRpcMimeType(), toRawData()); }
@@ -143,10 +142,10 @@ public:
void setMethod(const QString &method)
{ m_jsonObject.insert(methodKey, method); }
- Utils::optional<Params> params() const
+ std::optional<Params> params() const
{
const QJsonValue &params = m_jsonObject.value(paramsKey);
- return params.isUndefined() ? Utils::nullopt : Utils::make_optional(Params(params));
+ return params.isUndefined() ? std::nullopt : std::make_optional(Params(params));
}
void setParams(const Params &params)
{ m_jsonObject.insert(paramsKey, QJsonValue(params)); }
@@ -187,7 +186,7 @@ public:
void setMethod(const QString &method)
{ m_jsonObject.insert(methodKey, method); }
- Utils::optional<std::nullptr_t> params() const
+ std::optional<std::nullptr_t> params() const
{ return nullptr; }
void setParams(const std::nullptr_t &/*params*/)
{ m_jsonObject.insert(paramsKey, QJsonValue::Null); }
@@ -216,7 +215,7 @@ public:
QString message() const { return typedValue<QString>(messageKey); }
void setMessage(const QString &message) { insert(messageKey, message); }
- Utils::optional<Error> data() const { return optionalValue<Error>(dataKey); }
+ std::optional<Error> data() const { return optionalValue<Error>(dataKey); }
void setData(const Error &data) { insert(dataKey, data); }
void clearData() { remove(dataKey); }
@@ -275,22 +274,21 @@ public:
void setId(MessageId id)
{ this->m_jsonObject.insert(idKey, id); }
- Utils::optional<Result> result() const
+ std::optional<Result> result() const
{
const QJsonValue &result = m_jsonObject.value(resultKey);
if (result.isUndefined())
- return Utils::nullopt;
- return Utils::make_optional(Result(result));
+ return std::nullopt;
+ return std::make_optional(Result(result));
}
void setResult(const Result &result) { m_jsonObject.insert(resultKey, QJsonValue(result)); }
void clearResult() { m_jsonObject.remove(resultKey); }
using Error = ResponseError<ErrorDataType>;
- Utils::optional<Error> error() const
+ std::optional<Error> error() const
{
const QJsonValue &val = m_jsonObject.value(errorKey);
- return val.isUndefined() ? Utils::nullopt
- : Utils::make_optional(fromJsonValue<Error>(val));
+ return val.isUndefined() ? std::nullopt : std::make_optional(fromJsonValue<Error>(val));
}
void setError(const Error &error)
{ m_jsonObject.insert(errorKey, QJsonValue(error)); }
@@ -312,20 +310,18 @@ public:
void setId(MessageId id)
{ this->m_jsonObject.insert(idKey, id); }
- Utils::optional<std::nullptr_t> result() const
+ std::optional<std::nullptr_t> result() const
{
- return m_jsonObject.value(resultKey).isNull() ? Utils::make_optional(nullptr)
- : Utils::nullopt;
+ return m_jsonObject.value(resultKey).isNull() ? std::make_optional(nullptr) : std::nullopt;
}
void setResult(const std::nullptr_t &) { m_jsonObject.insert(resultKey, QJsonValue::Null); }
void clearResult() { m_jsonObject.remove(resultKey); }
using Error = ResponseError<ErrorDataType>;
- Utils::optional<Error> error() const
+ std::optional<Error> error() const
{
const QJsonValue &val = m_jsonObject.value(errorKey);
- return val.isUndefined() ? Utils::nullopt
- : Utils::make_optional(fromJsonValue<Error>(val));
+ return val.isUndefined() ? std::nullopt : std::make_optional(fromJsonValue<Error>(val));
}
void setError(const Error &error)
{ m_jsonObject.insert(errorKey, QJsonValue(error)); }
@@ -357,7 +353,7 @@ public:
void setResponseCallback(const ResponseCallback &callback)
{ m_callBack = callback; }
- Utils::optional<ResponseHandler> responseHandler() const final
+ std::optional<ResponseHandler> responseHandler() const final
{
QElapsedTimer timer;
timer.start();
@@ -369,7 +365,7 @@ public:
callback(Response(message.toJsonObject()));
};
- return Utils::make_optional(ResponseHandler{id(), callback});
+ return std::make_optional(ResponseHandler{id(), callback});
}
bool isValid(QString *errorMessage) const override
diff --git a/src/libs/languageserverprotocol/languagefeatures.cpp b/src/libs/languageserverprotocol/languagefeatures.cpp
index 6b2ce364a0..3d605158bd 100644
--- a/src/libs/languageserverprotocol/languagefeatures.cpp
+++ b/src/libs/languageserverprotocol/languagefeatures.cpp
@@ -49,11 +49,11 @@ HoverRequest::HoverRequest(const TextDocumentPositionParams &params)
: Request(methodName, params)
{ }
-Utils::optional<MarkupOrString> ParameterInformation::documentation() const
+std::optional<MarkupOrString> ParameterInformation::documentation() const
{
QJsonValue documentation = value(documentationKey);
if (documentation.isUndefined())
- return Utils::nullopt;
+ return std::nullopt;
return MarkupOrString(documentation);
}
@@ -81,7 +81,7 @@ DocumentSymbolsRequest::DocumentSymbolsRequest(const DocumentSymbolParams &param
: Request(methodName, params)
{ }
-Utils::optional<QList<CodeActionKind> > CodeActionParams::CodeActionContext::only() const
+std::optional<QList<CodeActionKind> > CodeActionParams::CodeActionContext::only() const
{
return optionalArray<CodeActionKind>(onlyKey);
}
@@ -180,16 +180,16 @@ RenameRequest::RenameRequest(const RenameParams &params)
: Request(methodName, params)
{ }
-Utils::optional<DocumentUri> DocumentLink::target() const
+std::optional<DocumentUri> DocumentLink::target() const
{
- if (Utils::optional<QString> optionalTarget = optionalValue<QString>(targetKey))
- return Utils::make_optional(DocumentUri::fromProtocol(*optionalTarget));
- return Utils::nullopt;
+ if (std::optional<QString> optionalTarget = optionalValue<QString>(targetKey))
+ return std::make_optional(DocumentUri::fromProtocol(*optionalTarget));
+ return std::nullopt;
}
-Utils::optional<QJsonValue> DocumentLink::data() const
+std::optional<QJsonValue> DocumentLink::data() const
{
- return contains(dataKey) ? Utils::make_optional(value(dataKey)) : Utils::nullopt;
+ return contains(dataKey) ? std::make_optional(value(dataKey)) : std::nullopt;
}
TextDocumentParams::TextDocumentParams()
@@ -376,9 +376,9 @@ PrepareRenameResult::PrepareRenameResult(const QJsonValue &val)
}
}
-Utils::optional<QJsonValue> CodeLens::data() const
+std::optional<QJsonValue> CodeLens::data() const
{
- return contains(dataKey) ? Utils::make_optional(value(dataKey)) : Utils::nullopt;
+ return contains(dataKey) ? std::make_optional(value(dataKey)) : std::nullopt;
}
HoverResult::HoverResult(const QJsonValue &value)
diff --git a/src/libs/languageserverprotocol/languagefeatures.h b/src/libs/languageserverprotocol/languagefeatures.h
index fac9bcf410..753aad67f3 100644
--- a/src/libs/languageserverprotocol/languagefeatures.h
+++ b/src/libs/languageserverprotocol/languagefeatures.h
@@ -72,7 +72,7 @@ public:
HoverContent content() const;
void setContent(const HoverContent &content);
- Utils::optional<Range> range() const { return optionalValue<Range>(rangeKey); }
+ std::optional<Range> range() const { return optionalValue<Range>(rangeKey); }
void setRange(const Range &range) { insert(rangeKey, range); }
void clearRange() { remove(rangeKey); }
@@ -109,7 +109,7 @@ public:
QString label() const { return typedValue<QString>(labelKey); }
void setLabel(const QString &label) { insert(labelKey, label); }
- Utils::optional<MarkupOrString> documentation() const;
+ std::optional<MarkupOrString> documentation() const;
void setDocumentation(const MarkupOrString &documentation)
{ insert(documentationKey, documentation.toJson()); }
void clearDocumentation() { remove(documentationKey); }
@@ -127,13 +127,13 @@ class LANGUAGESERVERPROTOCOL_EXPORT SignatureInformation : public ParameterInfor
public:
using ParameterInformation::ParameterInformation;
- Utils::optional<QList<ParameterInformation>> parameters() const
+ std::optional<QList<ParameterInformation>> parameters() const
{ return optionalArray<ParameterInformation>(parametersKey); }
void setParameters(const QList<ParameterInformation> &parameters)
{ insertArray(parametersKey, parameters); }
void clearParameters() { remove(parametersKey); }
- Utils::optional<int> activeParameter() const { return optionalValue<int>(activeParameterKey); }
+ std::optional<int> activeParameter() const { return optionalValue<int>(activeParameterKey); }
void setActiveParameter(int activeParameter) { insert(activeParameterKey, activeParameter); }
void clearActiveParameter() { remove(activeParameterKey); }
};
@@ -163,7 +163,7 @@ public:
* In future version of the protocol this property might become
* mandatory to better express this.
*/
- Utils::optional<int> activeSignature() const { return optionalValue<int>(activeSignatureKey); }
+ std::optional<int> activeSignature() const { return optionalValue<int>(activeSignatureKey); }
void setActiveSignature(int activeSignature) { insert(activeSignatureKey, activeSignature); }
void clearActiveSignature() { remove(activeSignatureKey); }
@@ -176,7 +176,7 @@ public:
* mandatory to better express the active parameter if the
* active signature does have any.
*/
- Utils::optional<int> activeParameter() const { return optionalValue<int>(activeParameterKey); }
+ std::optional<int> activeParameter() const { return optionalValue<int>(activeParameterKey); }
void setActiveParameter(int activeParameter) { insert(activeParameterKey, activeParameter); }
void clearActiveParameter() { remove(activeParameterKey); }
@@ -277,7 +277,7 @@ public:
Range range() const { return typedValue<Range>(rangeKey); }
void setRange(const Range &range) { insert(rangeKey, range); }
- Utils::optional<int> kind() const { return optionalValue<int>(kindKey); }
+ std::optional<int> kind() const { return optionalValue<int>(kindKey); }
void setKind(int kind) { insert(kindKey, kind); }
void clearKind() { remove(kindKey); }
@@ -394,7 +394,7 @@ public:
void setDiagnostics(const QList<Diagnostic> &diagnostics)
{ insertArray(diagnosticsKey, diagnostics); }
- Utils::optional<QList<CodeActionKind>> only() const;
+ std::optional<QList<CodeActionKind>> only() const;
void setOnly(const QList<CodeActionKind> &only);
void clearOnly() { remove(onlyKey); }
@@ -424,21 +424,21 @@ public:
QString title() const { return typedValue<QString>(titleKey); }
void setTitle(QString title) { insert(titleKey, title); }
- Utils::optional<CodeActionKind> kind() const { return optionalValue<CodeActionKind>(kindKey); }
+ std::optional<CodeActionKind> kind() const { return optionalValue<CodeActionKind>(kindKey); }
void setKind(const CodeActionKind &kind) { insert(kindKey, kind); }
void clearKind() { remove(kindKey); }
- Utils::optional<QList<Diagnostic>> diagnostics() const
+ std::optional<QList<Diagnostic>> diagnostics() const
{ return optionalArray<Diagnostic>(diagnosticsKey); }
void setDiagnostics(const QList<Diagnostic> &diagnostics)
{ insertArray(diagnosticsKey, diagnostics); }
void clearDiagnostics() { remove(diagnosticsKey); }
- Utils::optional<WorkspaceEdit> edit() const { return optionalValue<WorkspaceEdit>(editKey); }
+ std::optional<WorkspaceEdit> edit() const { return optionalValue<WorkspaceEdit>(editKey); }
void setEdit(const WorkspaceEdit &edit) { insert(editKey, edit); }
void clearEdit() { remove(editKey); }
- Utils::optional<Command> command() const { return optionalValue<Command>(commandKey); }
+ std::optional<Command> command() const { return optionalValue<Command>(commandKey); }
void setCommand(const Command &command) { insert(commandKey, command); }
void clearCommand() { remove(commandKey); }
@@ -472,11 +472,11 @@ public:
Range range() const { return typedValue<Range>(rangeKey); }
void setRange(const Range &range) { insert(rangeKey, range); }
- Utils::optional<Command> command() const { return optionalValue<Command>(commandKey); }
+ std::optional<Command> command() const { return optionalValue<Command>(commandKey); }
void setCommand(const Command &command) { insert(commandKey, command); }
void clearCommand() { remove(commandKey); }
- Utils::optional<QJsonValue> data() const;
+ std::optional<QJsonValue> data() const;
void setData(const QJsonValue &data) { insert(dataKey, data); }
void clearData() { remove(dataKey); }
@@ -509,11 +509,11 @@ public:
Range range() const { return typedValue<Range>(rangeKey); }
void setRange(const Range &range) { insert(rangeKey, range); }
- Utils::optional<DocumentUri> target() const;
+ std::optional<DocumentUri> target() const;
void setTarget(const DocumentUri &target) { insert(targetKey, target.toString()); }
void clearTarget() { remove(targetKey); }
- Utils::optional<QJsonValue> data() const;
+ std::optional<QJsonValue> data() const;
void setData(const QJsonValue &data) { insert(dataKey, data); }
void clearData() { remove(dataKey); }
@@ -614,11 +614,11 @@ public:
QString label() const { return typedValue<QString>(labelKey); }
void setLabel(const QString &label) { insert(labelKey, label); }
- Utils::optional<TextEdit> textEdit() const { return optionalValue<TextEdit>(textEditKey); }
+ std::optional<TextEdit> textEdit() const { return optionalValue<TextEdit>(textEditKey); }
void setTextEdit(const TextEdit &textEdit) { insert(textEditKey, textEdit); }
void clearTextEdit() { remove(textEditKey); }
- Utils::optional<QList<TextEdit>> additionalTextEdits() const
+ std::optional<QList<TextEdit>> additionalTextEdits() const
{ return optionalArray<TextEdit>(additionalTextEditsKey); }
void setAdditionalTextEdits(const QList<TextEdit> &additionalTextEdits)
{ insertArray(additionalTextEditsKey, additionalTextEdits); }
@@ -659,19 +659,19 @@ public:
bool insertSpace() const { return typedValue<bool>(insertSpaceKey); }
void setInsertSpace(bool insertSpace) { insert(insertSpaceKey, insertSpace); }
- Utils::optional<bool> trimTrailingWhitespace() const
+ std::optional<bool> trimTrailingWhitespace() const
{ return optionalValue<bool>(trimTrailingWhitespaceKey); }
void setTrimTrailingWhitespace(bool trimTrailingWhitespace)
{ insert(trimTrailingWhitespaceKey, trimTrailingWhitespace); }
void clearTrimTrailingWhitespace() { remove(trimTrailingWhitespaceKey); }
- Utils::optional<bool> insertFinalNewline() const
+ std::optional<bool> insertFinalNewline() const
{ return optionalValue<bool>(insertFinalNewlineKey); }
void setInsertFinalNewline(bool insertFinalNewline)
{ insert(insertFinalNewlineKey, insertFinalNewline); }
void clearInsertFinalNewline() { remove(insertFinalNewlineKey); }
- Utils::optional<bool> trimFinalNewlines() const
+ std::optional<bool> trimFinalNewlines() const
{ return optionalValue<bool>(trimFinalNewlinesKey); }
void setTrimFinalNewlines(bool trimFinalNewlines)
{ insert(trimFinalNewlinesKey, trimFinalNewlines); }
diff --git a/src/libs/languageserverprotocol/lsptypes.cpp b/src/libs/languageserverprotocol/lsptypes.cpp
index 7db90d6fe7..c2810c9520 100644
--- a/src/libs/languageserverprotocol/lsptypes.cpp
+++ b/src/libs/languageserverprotocol/lsptypes.cpp
@@ -17,24 +17,24 @@
namespace LanguageServerProtocol {
-Utils::optional<DiagnosticSeverity> Diagnostic::severity() const
+std::optional<DiagnosticSeverity> Diagnostic::severity() const
{
if (auto val = optionalValue<int>(severityKey))
- return Utils::make_optional(static_cast<DiagnosticSeverity>(*val));
- return Utils::nullopt;
+ return std::make_optional(static_cast<DiagnosticSeverity>(*val));
+ return std::nullopt;
}
-Utils::optional<Diagnostic::Code> Diagnostic::code() const
+std::optional<Diagnostic::Code> Diagnostic::code() const
{
QJsonValue codeValue = value(codeKey);
auto it = find(codeKey);
if (codeValue.isUndefined())
- return Utils::nullopt;
+ return std::nullopt;
QJsonValue::Type type = it.value().type();
if (type != QJsonValue::String && type != QJsonValue::Double)
- return Utils::make_optional(Code(QString()));
- return Utils::make_optional(codeValue.isDouble() ? Code(codeValue.toInt())
- : Code(codeValue.toString()));
+ return std::make_optional(Code(QString()));
+ return std::make_optional(codeValue.isDouble() ? Code(codeValue.toInt())
+ : Code(codeValue.toString()));
}
void Diagnostic::setCode(const Diagnostic::Code &code)
@@ -42,16 +42,16 @@ void Diagnostic::setCode(const Diagnostic::Code &code)
insertVariant<int, QString>(codeKey, code);
}
-Utils::optional<WorkspaceEdit::Changes> WorkspaceEdit::changes() const
+std::optional<WorkspaceEdit::Changes> WorkspaceEdit::changes() const
{
auto it = find(changesKey);
if (it == end())
- return Utils::nullopt;
+ return std::nullopt;
const QJsonObject &changesObject = it.value().toObject();
Changes changesResult;
for (const QString &key : changesObject.keys())
changesResult[DocumentUri::fromProtocol(key)] = LanguageClientArray<TextEdit>(changesObject.value(key)).toList();
- return Utils::make_optional(changesResult);
+ return std::make_optional(changesResult);
}
void WorkspaceEdit::setChanges(const Changes &changes)
@@ -325,7 +325,7 @@ QString expressionForGlob(QString globPattern)
bool DocumentFilter::applies(const Utils::FilePath &fileName, const Utils::MimeType &mimeType) const
{
- if (Utils::optional<QString> _pattern = pattern()) {
+ if (std::optional<QString> _pattern = pattern()) {
QRegularExpression::PatternOption option = QRegularExpression::NoPatternOption;
if (fileName.caseSensitivity() == Qt::CaseInsensitive)
option = QRegularExpression::CaseInsensitiveOption;
@@ -333,7 +333,7 @@ bool DocumentFilter::applies(const Utils::FilePath &fileName, const Utils::MimeT
if (regexp.isValid() && regexp.match(fileName.toString()).hasMatch())
return true;
}
- if (Utils::optional<QString> _lang = language()) {
+ if (std::optional<QString> _lang = language()) {
auto match = [&_lang](const Utils::MimeType &mimeType){
return *_lang == TextDocumentItem::mimeTypeToLanguageId(mimeType);
};
diff --git a/src/libs/languageserverprotocol/lsptypes.h b/src/libs/languageserverprotocol/lsptypes.h
index d65e30b869..0c848130ce 100644
--- a/src/libs/languageserverprotocol/lsptypes.h
+++ b/src/libs/languageserverprotocol/lsptypes.h
@@ -10,7 +10,6 @@
#include <utils/filepath.h>
#include <utils/link.h>
#include <utils/mimeutils.h>
-#include <utils/optional.h>
#include <utils/textutils.h>
#include <QTextCursor>
@@ -19,6 +18,7 @@
#include <QList>
#include <functional>
+#include <optional>
#include <variant>
namespace LanguageServerProtocol {
@@ -162,20 +162,20 @@ public:
// The diagnostic's severity. Can be omitted. If omitted it is up to the
// client to interpret diagnostics as error, warning, info or hint.
- Utils::optional<DiagnosticSeverity> severity() const;
+ std::optional<DiagnosticSeverity> severity() const;
void setSeverity(const DiagnosticSeverity &severity)
{ insert(severityKey, static_cast<int>(severity)); }
void clearSeverity() { remove(severityKey); }
// The diagnostic's code, which might appear in the user interface.
using Code = std::variant<int, QString>;
- Utils::optional<Code> code() const;
+ std::optional<Code> code() const;
void setCode(const Code &code);
void clearCode() { remove(codeKey); }
// A human-readable string describing the source of this
// diagnostic, e.g. 'typescript' or 'super lint'.
- Utils::optional<QString> source() const
+ std::optional<QString> source() const
{ return optionalValue<QString>(sourceKey); }
void setSource(const QString &source) { insert(sourceKey, source); }
void clearSource() { remove(sourceKey); }
@@ -204,7 +204,7 @@ public:
void clearCommand() { remove(commandKey); }
// Arguments that the command handler should be invoked with.
- Utils::optional<QJsonArray> arguments() const { return typedValue<QJsonArray>(argumentsKey); }
+ std::optional<QJsonArray> arguments() const { return typedValue<QJsonArray>(argumentsKey); }
void setArguments(const QJsonArray &arguments) { insert(argumentsKey, arguments); }
void clearArguments() { remove(argumentsKey); }
@@ -291,7 +291,7 @@ public:
// Holds changes to existing resources.
using Changes = QMap<DocumentUri, QList<TextEdit>>;
- Utils::optional<Changes> changes() const;
+ std::optional<Changes> changes() const;
void setChanges(const Changes &changes);
/*
@@ -303,7 +303,7 @@ public:
* Note: If the client can handle versioned document edits and if documentChanges are present,
* the latter are preferred over changes.
*/
- Utils::optional<QList<TextDocumentEdit>> documentChanges() const
+ std::optional<QList<TextDocumentEdit>> documentChanges() const
{ return optionalArray<TextDocumentEdit>(documentChangesKey); }
void setDocumentChanges(const QList<TextDocumentEdit> &changes)
{ insertArray(documentChangesKey, changes); }
@@ -363,12 +363,12 @@ public:
using JsonObject::JsonObject;
// A language id, like `typescript`.
- Utils::optional<QString> language() const { return optionalValue<QString>(languageKey); }
+ std::optional<QString> language() const { return optionalValue<QString>(languageKey); }
void setLanguage(const QString &language) { insert(languageKey, language); }
void clearLanguage() { remove(languageKey); }
// A Uri [scheme](#Uri.scheme), like `file` or `untitled`.
- Utils::optional<QString> scheme() const { return optionalValue<QString>(schemeKey); }
+ std::optional<QString> scheme() const { return optionalValue<QString>(schemeKey); }
void setScheme(const QString &scheme) { insert(schemeKey, scheme); }
void clearScheme() { remove(schemeKey); }
@@ -387,7 +387,7 @@ public:
* (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but
* not `example.0`)
*/
- Utils::optional<QString> pattern() const { return optionalValue<QString>(patternKey); }
+ std::optional<QString> pattern() const { return optionalValue<QString>(patternKey); }
void setPattern(const QString &pattern) { insert(patternKey, pattern); }
void clearPattern() { remove(patternKey); }
@@ -478,14 +478,14 @@ public:
int kind() const { return typedValue<int>(kindKey); }
void setKind(int kind) { insert(kindKey, kind); }
- Utils::optional<bool> deprecated() const { return optionalValue<bool>(deprecatedKey); }
+ std::optional<bool> deprecated() const { return optionalValue<bool>(deprecatedKey); }
void setDeprecated(bool deprecated) { insert(deprecatedKey, deprecated); }
void clearDeprecated() { remove(deprecatedKey); }
Location location() const { return typedValue<Location>(locationKey); }
void setLocation(const Location &location) { insert(locationKey, location); }
- Utils::optional<QString> containerName() const
+ std::optional<QString> containerName() const
{ return optionalValue<QString>(containerNameKey); }
void setContainerName(const QString &containerName) { insert(containerNameKey, containerName); }
void clearContainerName() { remove(containerNameKey); }
@@ -502,14 +502,14 @@ public:
QString name() const { return typedValue<QString>(nameKey); }
void setName(const QString &name) { insert(nameKey, name); }
- Utils::optional<QString> detail() const { return optionalValue<QString>(detailKey); }
+ std::optional<QString> detail() const { return optionalValue<QString>(detailKey); }
void setDetail(const QString &detail) { insert(detailKey, detail); }
void clearDetail() { remove(detailKey); }
int kind() const { return typedValue<int>(kindKey); }
void setKind(int kind) { insert(kindKey, kind); }
- Utils::optional<bool> deprecated() const { return optionalValue<bool>(deprecatedKey); }
+ std::optional<bool> deprecated() const { return optionalValue<bool>(deprecatedKey); }
void setDeprecated(bool deprecated) { insert(deprecatedKey, deprecated); }
void clearDeprecated() { remove(deprecatedKey); }
@@ -519,7 +519,7 @@ public:
Range selectionRange() const { return typedValue<Range>(selectionRangeKey); }
void setSelectionRange(Range selectionRange) { insert(selectionRangeKey, selectionRange); }
- Utils::optional<QList<DocumentSymbol>> children() const
+ std::optional<QList<DocumentSymbol>> children() const
{ return optionalArray<DocumentSymbol>(childrenKey); }
void setChildren(QList<DocumentSymbol> children) { insertArray(childrenKey, children); }
void clearChildren() { remove(childrenKey); }
diff --git a/src/libs/languageserverprotocol/lsputils.h b/src/libs/languageserverprotocol/lsputils.h
index 8e2af619cc..874bc0bc98 100644
--- a/src/libs/languageserverprotocol/lsputils.h
+++ b/src/libs/languageserverprotocol/lsputils.h
@@ -6,13 +6,13 @@
#include "languageserverprotocol_global.h"
#include <utils/algorithm.h>
-#include <utils/optional.h>
#include <utils/qtcassert.h>
#include <QJsonArray>
#include <QJsonObject>
#include <QLoggingCategory>
+#include <optional>
#include <variant>
namespace LanguageServerProtocol {
diff --git a/src/libs/languageserverprotocol/messages.h b/src/libs/languageserverprotocol/messages.h
index f1c38f9cab..a6dde81c6e 100644
--- a/src/libs/languageserverprotocol/messages.h
+++ b/src/libs/languageserverprotocol/messages.h
@@ -55,7 +55,7 @@ class LANGUAGESERVERPROTOCOL_EXPORT ShowMessageRequestParams : public ShowMessag
public:
using ShowMessageParams::ShowMessageParams;
- Utils::optional<QList<MessageActionItem>> actions() const
+ std::optional<QList<MessageActionItem>> actions() const
{ return optionalArray<MessageActionItem>(actionsKey); }
void setActions(const QList<MessageActionItem> &actions) { insertArray(actionsKey, actions); }
void clearActions() { remove(actionsKey); }
diff --git a/src/libs/languageserverprotocol/progresssupport.h b/src/libs/languageserverprotocol/progresssupport.h
index 6c3180adba..d07b894729 100644
--- a/src/libs/languageserverprotocol/progresssupport.h
+++ b/src/libs/languageserverprotocol/progresssupport.h
@@ -31,7 +31,7 @@ public:
* long running operation.
* Clients that don't support cancellation can ignore the setting.
*/
- Utils::optional<bool> cancellable() const { return optionalValue<bool>(cancellableKey); }
+ std::optional<bool> cancellable() const { return optionalValue<bool>(cancellableKey); }
void setCancellable(bool cancellable) { insert(cancellableKey, cancellable); }
void clearCancellable() { remove(cancellableKey); }
@@ -42,7 +42,7 @@ public:
* Examples: "3/25 files", "project/src/module2", "node_modules/some_dep".
* If unset, the previous progress message (if any) is still valid.
*/
- Utils::optional<QString> message() const { return optionalValue<QString>(messageKey); }
+ std::optional<QString> message() const { return optionalValue<QString>(messageKey); }
void setMessage(const QString &message) { insert(messageKey, message); }
void clearMessage() { remove(messageKey); }
@@ -58,7 +58,7 @@ public:
// Allthough percentage is defined as an uint by the protocol some server
// return a double here. Be less strict and also use a double.
// CAUTION: the range is still 0 - 100 and not 0 - 1
- Utils::optional<double> percentage() const { return optionalValue<double>(percentageKey); }
+ std::optional<double> percentage() const { return optionalValue<double>(percentageKey); }
void setPercentage(double percentage) { insert(percentageKey, percentage); }
void clearPercentage() { remove(percentageKey); }
};
@@ -88,7 +88,7 @@ public:
* Optional, a final message indicating to for example indicate the outcome
* of the operation.
*/
- Utils::optional<QString> message() const { return optionalValue<QString>(messageKey); }
+ std::optional<QString> message() const { return optionalValue<QString>(messageKey); }
void setMessage(const QString &message) { insert(messageKey, message); }
void clearMessage() { remove(messageKey); }
};
diff --git a/src/libs/languageserverprotocol/semantictokens.h b/src/libs/languageserverprotocol/semantictokens.h
index 6025a6d683..6cc303b84f 100644
--- a/src/libs/languageserverprotocol/semantictokens.h
+++ b/src/libs/languageserverprotocol/semantictokens.h
@@ -125,7 +125,7 @@ public:
* A server can then instead of computing all semantic tokens again simply
* send a delta.
*/
- Utils::optional<QString> resultId() const { return optionalValue<QString>(resultIdKey); }
+ std::optional<QString> resultId() const { return optionalValue<QString>(resultIdKey); }
void setResultId(const QString &resultId) { insert(resultIdKey, resultId); }
void clearResultId() { remove(resultIdKey); }
@@ -169,7 +169,7 @@ public:
int deleteCount() const { return typedValue<int>(deleteCountKey); }
void setDeleteCount(int deleteCount) { insert(deleteCountKey, deleteCount); }
- Utils::optional<QList<int>> data() const { return optionalArray<int>(dataKey); }
+ std::optional<QList<int>> data() const { return optionalArray<int>(dataKey); }
void setData(const QList<int> &value) { insertArray(dataKey, value); }
void clearData() { remove(dataKey); }
diff --git a/src/libs/languageserverprotocol/servercapabilities.cpp b/src/libs/languageserverprotocol/servercapabilities.cpp
index 6ba697f5b3..1573f49285 100644
--- a/src/libs/languageserverprotocol/servercapabilities.cpp
+++ b/src/libs/languageserverprotocol/servercapabilities.cpp
@@ -5,13 +5,14 @@
namespace LanguageServerProtocol {
-Utils::optional<ServerCapabilities::TextDocumentSync> ServerCapabilities::textDocumentSync() const
+std::optional<ServerCapabilities::TextDocumentSync> ServerCapabilities::textDocumentSync() const
{
const QJsonValue &sync = value(textDocumentSyncKey);
if (sync.isUndefined())
- return Utils::nullopt;
- return Utils::make_optional(sync.isDouble() ? TextDocumentSync(sync.toInt())
- : TextDocumentSync(TextDocumentSyncOptions(sync.toObject())));
+ return std::nullopt;
+ return std::make_optional(sync.isDouble()
+ ? TextDocumentSync(sync.toInt())
+ : TextDocumentSync(TextDocumentSyncOptions(sync.toObject())));
}
void ServerCapabilities::setTextDocumentSync(const ServerCapabilities::TextDocumentSync &textDocumentSync)
@@ -21,27 +22,27 @@ void ServerCapabilities::setTextDocumentSync(const ServerCapabilities::TextDocum
TextDocumentSyncKind ServerCapabilities::textDocumentSyncKindHelper()
{
- if (Utils::optional<TextDocumentSync> sync = textDocumentSync()) {
+ if (std::optional<TextDocumentSync> sync = textDocumentSync()) {
if (auto kind = std::get_if<int>(&*sync))
return static_cast<TextDocumentSyncKind>(*kind);
if (auto options = std::get_if<TextDocumentSyncOptions>(&*sync)) {
- if (const Utils::optional<int> &change = options->change())
+ if (const std::optional<int> &change = options->change())
return static_cast<TextDocumentSyncKind>(*change);
}
}
return TextDocumentSyncKind::None;
}
-Utils::optional<std::variant<bool, WorkDoneProgressOptions>> ServerCapabilities::hoverProvider()
+std::optional<std::variant<bool, WorkDoneProgressOptions>> ServerCapabilities::hoverProvider()
const
{
using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(hoverProviderKey);
if (provider.isBool())
- return Utils::make_optional(RetType(provider.toBool()));
+ return std::make_optional(RetType(provider.toBool()));
if (provider.isObject())
- return Utils::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
- return Utils::nullopt;
+ return std::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
+ return std::nullopt;
}
void ServerCapabilities::setHoverProvider(
@@ -50,15 +51,16 @@ void ServerCapabilities::setHoverProvider(
insertVariant<bool, WorkDoneProgressOptions>(hoverProviderKey, hoverProvider);
}
-Utils::optional<std::variant<bool, ServerCapabilities::RegistrationOptions>>
+std::optional<std::variant<bool, ServerCapabilities::RegistrationOptions>>
ServerCapabilities::typeDefinitionProvider() const
{
using RetType = std::variant<bool, ServerCapabilities::RegistrationOptions>;
const QJsonValue &provider = value(typeDefinitionProviderKey);
if (provider.isUndefined() || !(provider.isBool() || provider.isObject()))
- return Utils::nullopt;
- return Utils::make_optional(provider.isBool() ? RetType(provider.toBool())
- : RetType(RegistrationOptions(provider.toObject())));
+ return std::nullopt;
+ return std::make_optional(provider.isBool()
+ ? RetType(provider.toBool())
+ : RetType(RegistrationOptions(provider.toObject())));
}
void ServerCapabilities::setTypeDefinitionProvider(
@@ -68,15 +70,16 @@ void ServerCapabilities::setTypeDefinitionProvider(
typeDefinitionProvider);
}
-Utils::optional<std::variant<bool, ServerCapabilities::RegistrationOptions>>
+std::optional<std::variant<bool, ServerCapabilities::RegistrationOptions>>
ServerCapabilities::implementationProvider() const
{
using RetType = std::variant<bool, ServerCapabilities::RegistrationOptions>;
const QJsonValue &provider = value(implementationProviderKey);
if (provider.isUndefined() || !(provider.isBool() || provider.isObject()))
- return Utils::nullopt;
- return Utils::make_optional(provider.isBool() ? RetType(provider.toBool())
- : RetType(RegistrationOptions(provider.toObject())));
+ return std::nullopt;
+ return std::make_optional(provider.isBool()
+ ? RetType(provider.toBool())
+ : RetType(RegistrationOptions(provider.toObject())));
}
void ServerCapabilities::setImplementationProvider(
@@ -85,16 +88,16 @@ void ServerCapabilities::setImplementationProvider(
insertVariant<bool, RegistrationOptions>(implementationProviderKey, implementationProvider);
}
-Utils::optional<std::variant<bool, WorkDoneProgressOptions>>
+std::optional<std::variant<bool, WorkDoneProgressOptions>>
ServerCapabilities::referencesProvider() const
{
using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(referencesProviderKey);
if (provider.isBool())
- return Utils::make_optional(RetType(provider.toBool()));
+ return std::make_optional(RetType(provider.toBool()));
if (provider.isObject())
- return Utils::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
- return Utils::nullopt;
+ return std::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
+ return std::nullopt;
}
void ServerCapabilities::setReferencesProvider(
@@ -104,16 +107,16 @@ void ServerCapabilities::setReferencesProvider(
referencesProvider);
}
-Utils::optional<std::variant<bool, WorkDoneProgressOptions>>
+std::optional<std::variant<bool, WorkDoneProgressOptions>>
ServerCapabilities::documentHighlightProvider() const
{
using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(documentHighlightProviderKey);
if (provider.isBool())
- return Utils::make_optional(RetType(provider.toBool()));
+ return std::make_optional(RetType(provider.toBool()));
if (provider.isObject())
- return Utils::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
- return Utils::nullopt;
+ return std::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
+ return std::nullopt;
}
void ServerCapabilities::setDocumentHighlightProvider(
@@ -123,16 +126,16 @@ void ServerCapabilities::setDocumentHighlightProvider(
documentHighlightProvider);
}
-Utils::optional<std::variant<bool, WorkDoneProgressOptions>>
+std::optional<std::variant<bool, WorkDoneProgressOptions>>
ServerCapabilities::documentSymbolProvider() const
{
using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(documentSymbolProviderKey);
if (provider.isBool())
- return Utils::make_optional(RetType(provider.toBool()));
+ return std::make_optional(RetType(provider.toBool()));
if (provider.isObject())
- return Utils::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
- return Utils::nullopt;
+ return std::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
+ return std::nullopt;
}
void ServerCapabilities::setDocumentSymbolProvider(
@@ -142,7 +145,7 @@ void ServerCapabilities::setDocumentSymbolProvider(
documentSymbolProvider);
}
-Utils::optional<SemanticTokensOptions> ServerCapabilities::semanticTokensProvider() const
+std::optional<SemanticTokensOptions> ServerCapabilities::semanticTokensProvider() const
{
return optionalValue<SemanticTokensOptions>(semanticTokensProviderKey);
}
@@ -153,16 +156,16 @@ void ServerCapabilities::setSemanticTokensProvider(
insert(semanticTokensProviderKey, semanticTokensProvider);
}
-Utils::optional<std::variant<bool, WorkDoneProgressOptions>>
+std::optional<std::variant<bool, WorkDoneProgressOptions>>
ServerCapabilities::workspaceSymbolProvider() const
{
using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(workspaceSymbolProviderKey);
if (provider.isBool())
- return Utils::make_optional(RetType(provider.toBool()));
+ return std::make_optional(RetType(provider.toBool()));
if (provider.isObject())
- return Utils::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
- return Utils::nullopt;
+ return std::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
+ return std::nullopt;
}
void ServerCapabilities::setWorkspaceSymbolProvider(
@@ -172,29 +175,29 @@ void ServerCapabilities::setWorkspaceSymbolProvider(
workspaceSymbolProvider);
}
-Utils::optional<std::variant<bool, CodeActionOptions>> ServerCapabilities::codeActionProvider() const
+std::optional<std::variant<bool, CodeActionOptions>> ServerCapabilities::codeActionProvider() const
{
const QJsonValue &provider = value(codeActionProviderKey);
if (provider.isBool())
- return Utils::make_optional(std::variant<bool, CodeActionOptions>(provider.toBool()));
+ return std::make_optional(std::variant<bool, CodeActionOptions>(provider.toBool()));
if (provider.isObject()) {
CodeActionOptions options(provider);
if (options.isValid())
- return Utils::make_optional(std::variant<bool, CodeActionOptions>(options));
+ return std::make_optional(std::variant<bool, CodeActionOptions>(options));
}
- return Utils::nullopt;
+ return std::nullopt;
}
-Utils::optional<std::variant<bool, WorkDoneProgressOptions>>
+std::optional<std::variant<bool, WorkDoneProgressOptions>>
ServerCapabilities::documentFormattingProvider() const
{
using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(documentFormattingProviderKey);
if (provider.isBool())
- return Utils::make_optional(RetType(provider.toBool()));
+ return std::make_optional(RetType(provider.toBool()));
if (provider.isObject())
- return Utils::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
- return Utils::nullopt;
+ return std::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
+ return std::nullopt;
}
void ServerCapabilities::setDocumentFormattingProvider(
@@ -204,16 +207,16 @@ void ServerCapabilities::setDocumentFormattingProvider(
documentFormattingProvider);
}
-Utils::optional<std::variant<bool, WorkDoneProgressOptions>>
+std::optional<std::variant<bool, WorkDoneProgressOptions>>
ServerCapabilities::documentRangeFormattingProvider() const
{
using RetType = std::variant<bool, WorkDoneProgressOptions>;
const QJsonValue &provider = value(documentRangeFormattingProviderKey);
if (provider.isBool())
- return Utils::make_optional(RetType(provider.toBool()));
+ return std::make_optional(RetType(provider.toBool()));
if (provider.isObject())
- return Utils::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
- return Utils::nullopt;
+ return std::make_optional(RetType(WorkDoneProgressOptions(provider.toObject())));
+ return std::nullopt;
}
void ServerCapabilities::setDocumentRangeFormattingProvider(
@@ -223,7 +226,7 @@ void ServerCapabilities::setDocumentRangeFormattingProvider(
documentRangeFormattingProvider);
}
-Utils::optional<std::variant<ServerCapabilities::RenameOptions, bool>> ServerCapabilities::renameProvider() const
+std::optional<std::variant<ServerCapabilities::RenameOptions, bool>> ServerCapabilities::renameProvider() const
{
using RetType = std::variant<ServerCapabilities::RenameOptions, bool>;
const QJsonValue &localValue = value(renameProviderKey);
@@ -231,7 +234,7 @@ Utils::optional<std::variant<ServerCapabilities::RenameOptions, bool>> ServerCap
return RetType(localValue.toBool());
if (localValue.isObject())
return RetType(RenameOptions(localValue.toObject()));
- return Utils::nullopt;
+ return std::nullopt;
}
void ServerCapabilities::setRenameProvider(std::variant<ServerCapabilities::RenameOptions, bool> renameProvider)
@@ -239,7 +242,7 @@ void ServerCapabilities::setRenameProvider(std::variant<ServerCapabilities::Rena
insertVariant<RenameOptions, bool>(renameProviderKey, renameProvider);
}
-Utils::optional<std::variant<bool, JsonObject>> ServerCapabilities::colorProvider() const
+std::optional<std::variant<bool, JsonObject>> ServerCapabilities::colorProvider() const
{
using RetType = std::variant<bool, JsonObject>;
const QJsonValue &localValue = value(colorProviderKey);
@@ -247,7 +250,7 @@ Utils::optional<std::variant<bool, JsonObject>> ServerCapabilities::colorProvide
return RetType(localValue.toBool());
if (localValue.isObject())
return RetType(JsonObject(localValue.toObject()));
- return Utils::nullopt;
+ return std::nullopt;
}
void ServerCapabilities::setColorProvider(std::variant<bool, JsonObject> colorProvider)
@@ -255,15 +258,15 @@ void ServerCapabilities::setColorProvider(std::variant<bool, JsonObject> colorPr
insertVariant<bool, JsonObject>(renameProviderKey, colorProvider);
}
-Utils::optional<std::variant<QString, bool> >
+std::optional<std::variant<QString, bool> >
ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::changeNotifications() const
{
using RetType = std::variant<QString, bool>;
const QJsonValue &change = value(changeNotificationsKey);
if (change.isUndefined())
- return Utils::nullopt;
- return Utils::make_optional(change.isBool() ? RetType(change.toBool())
- : RetType(change.toString()));
+ return std::nullopt;
+ return std::make_optional(change.isBool() ? RetType(change.toBool())
+ : RetType(change.toString()));
}
void ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::setChangeNotifications(
@@ -293,7 +296,7 @@ bool CodeActionOptions::isValid() const
return WorkDoneProgressOptions::isValid() && contains(codeActionKindsKey);
}
-Utils::optional<std::variant<bool, QJsonObject>> SemanticTokensOptions::range() const
+std::optional<std::variant<bool, QJsonObject>> SemanticTokensOptions::range() const
{
using RetType = std::variant<bool, QJsonObject>;
const QJsonValue &rangeOptions = value(rangeKey);
@@ -301,7 +304,7 @@ Utils::optional<std::variant<bool, QJsonObject>> SemanticTokensOptions::range()
return RetType(rangeOptions.toBool());
if (rangeOptions.isObject())
return RetType(rangeOptions.toObject());
- return Utils::nullopt;
+ return std::nullopt;
}
void SemanticTokensOptions::setRange(const std::variant<bool, QJsonObject> &range)
@@ -309,7 +312,7 @@ void SemanticTokensOptions::setRange(const std::variant<bool, QJsonObject> &rang
insertVariant<bool, QJsonObject>(rangeKey, range);
}
-Utils::optional<std::variant<bool, SemanticTokensOptions::FullSemanticTokenOptions>>
+std::optional<std::variant<bool, SemanticTokensOptions::FullSemanticTokenOptions>>
SemanticTokensOptions::full() const
{
using RetType = std::variant<bool, SemanticTokensOptions::FullSemanticTokenOptions>;
@@ -318,7 +321,7 @@ SemanticTokensOptions::full() const
return RetType(fullOptions.toBool());
if (fullOptions.isObject())
return RetType(FullSemanticTokenOptions(fullOptions.toObject()));
- return Utils::nullopt;
+ return std::nullopt;
}
void SemanticTokensOptions::setFull(
diff --git a/src/libs/languageserverprotocol/servercapabilities.h b/src/libs/languageserverprotocol/servercapabilities.h
index c6cfe96ca6..35028760d1 100644
--- a/src/libs/languageserverprotocol/servercapabilities.h
+++ b/src/libs/languageserverprotocol/servercapabilities.h
@@ -13,7 +13,7 @@ class LANGUAGESERVERPROTOCOL_EXPORT WorkDoneProgressOptions : public JsonObject
public:
using JsonObject::JsonObject;
- Utils::optional<bool> workDoneProgress() const { return optionalValue<bool>(workDoneProgressKey); }
+ std::optional<bool> workDoneProgress() const { return optionalValue<bool>(workDoneProgressKey); }
void setWorkDoneProgress(bool workDoneProgress) { insert(workDoneProgressKey, workDoneProgress); }
void clearWorkDoneProgress() { remove(workDoneProgressKey); }
};
@@ -23,7 +23,7 @@ class LANGUAGESERVERPROTOCOL_EXPORT ResolveProviderOption : public JsonObject
public:
using JsonObject::JsonObject;
- Utils::optional<bool> resolveProvider() const { return optionalValue<bool>(resolveProviderKey); }
+ std::optional<bool> resolveProvider() const { return optionalValue<bool>(resolveProviderKey); }
void setResolveProvider(bool resolveProvider) { insert(resolveProviderKey, resolveProvider); }
void clearResolveProvider() { remove(resolveProviderKey); }
};
@@ -50,7 +50,7 @@ public:
using JsonObject::JsonObject;
// The client is supposed to include the content on save.
- Utils::optional<bool> includeText() const { return optionalValue<bool>(includeTextKey); }
+ std::optional<bool> includeText() const { return optionalValue<bool>(includeTextKey); }
void setIncludeText(bool includeText) { insert(includeTextKey, includeText); }
void clearIncludeText() { remove(includeTextKey); }
};
@@ -61,30 +61,30 @@ public:
using JsonObject::JsonObject;
// Open and close notifications are sent to the server.
- Utils::optional<bool> openClose() const { return optionalValue<bool>(openCloseKey); }
+ std::optional<bool> openClose() const { return optionalValue<bool>(openCloseKey); }
void setOpenClose(bool openClose) { insert(openCloseKey, openClose); }
void clearOpenClose() { remove(openCloseKey); }
// Change notifications are sent to the server. See TextDocumentSyncKind.None,
// TextDocumentSyncKind.Full and TextDocumentSyncKind.Incremental.
- Utils::optional<int> change() const { return optionalValue<int>(changeKey); }
+ std::optional<int> change() const { return optionalValue<int>(changeKey); }
void setChange(int change) { insert(changeKey, change); }
void clearChange() { remove(changeKey); }
// Will save notifications are sent to the server.
- Utils::optional<bool> willSave() const { return optionalValue<bool>(willSaveKey); }
+ std::optional<bool> willSave() const { return optionalValue<bool>(willSaveKey); }
void setWillSave(bool willSave) { insert(willSaveKey, willSave); }
void clearWillSave() { remove(willSaveKey); }
// Will save wait until requests are sent to the server.
- Utils::optional<bool> willSaveWaitUntil() const
+ std::optional<bool> willSaveWaitUntil() const
{ return optionalValue<bool>(willSaveWaitUntilKey); }
void setWillSaveWaitUntil(bool willSaveWaitUntil)
{ insert(willSaveWaitUntilKey, willSaveWaitUntil); }
void clearWillSaveWaitUntil() { remove(willSaveWaitUntilKey); }
// Save notifications are sent to the server.
- Utils::optional<SaveOptions> save() const { return optionalValue<SaveOptions>(saveKey); }
+ std::optional<SaveOptions> save() const { return optionalValue<SaveOptions>(saveKey); }
void setSave(const SaveOptions &save) { insert(saveKey, save); }
void clearSave() { remove(saveKey); }
};
@@ -130,7 +130,7 @@ public:
void setLegend(const SemanticTokensLegend &legend) { insert(legendKey, legend); }
/// Server supports providing semantic tokens for a specific range of a document.
- Utils::optional<std::variant<bool, QJsonObject>> range() const;
+ std::optional<std::variant<bool, QJsonObject>> range() const;
void setRange(const std::variant<bool, QJsonObject> &range);
void clearRange() { remove(rangeKey); }
@@ -140,13 +140,13 @@ public:
using JsonObject::JsonObject;
/// The server supports deltas for full documents.
- Utils::optional<bool> delta() const { return optionalValue<bool>(deltaKey); }
+ std::optional<bool> delta() const { return optionalValue<bool>(deltaKey); }
void setDelta(bool delta) { insert(deltaKey, delta); }
void clearDelta() { remove(deltaKey); }
};
/// Server supports providing semantic tokens for a full document.
- Utils::optional<std::variant<bool, FullSemanticTokenOptions>> full() const;
+ std::optional<std::variant<bool, FullSemanticTokenOptions>> full() const;
void setFull(const std::variant<bool, FullSemanticTokenOptions> &full);
void clearFull() { remove(fullKey); }
@@ -168,13 +168,13 @@ public:
using WorkDoneProgressOptions::WorkDoneProgressOptions;
// The characters that trigger completion automatically.
- Utils::optional<QList<QString>> triggerCharacters() const
+ std::optional<QList<QString>> triggerCharacters() const
{ return optionalArray<QString>(triggerCharactersKey); }
void setTriggerCharacters(const QList<QString> &triggerCharacters)
{ insertArray(triggerCharactersKey, triggerCharacters); }
void clearTriggerCharacters() { remove(triggerCharactersKey); }
- Utils::optional<bool> resolveProvider() const { return optionalValue<bool>(resolveProviderKey); }
+ std::optional<bool> resolveProvider() const { return optionalValue<bool>(resolveProviderKey); }
void setResolveProvider(bool resolveProvider) { insert(resolveProviderKey, resolveProvider); }
void clearResolveProvider() { remove(resolveProviderKey); }
};
@@ -185,7 +185,7 @@ public:
using WorkDoneProgressOptions::WorkDoneProgressOptions;
// The characters that trigger signature help automatically.
- Utils::optional<QList<QString>> triggerCharacters() const
+ std::optional<QList<QString>> triggerCharacters() const
{ return optionalArray<QString>(triggerCharactersKey); }
void setTriggerCharacters(const QList<QString> &triggerCharacters)
{ insertArray(triggerCharactersKey, triggerCharacters); }
@@ -205,7 +205,7 @@ public:
{ insert(firstTriggerCharacterKey, firstTriggerCharacter); }
// More trigger characters.
- Utils::optional<QList<QString>> moreTriggerCharacter() const
+ std::optional<QList<QString>> moreTriggerCharacter() const
{ return optionalArray<QString>(moreTriggerCharacterKey); }
void setMoreTriggerCharacter(const QList<QString> &moreTriggerCharacter)
{ insertArray(moreTriggerCharacterKey, moreTriggerCharacter); }
@@ -236,7 +236,7 @@ public:
// The id used to register the request. The id can be used to deregister
// the request again. See also Registration#id.
- Utils::optional<QString> id() const { return optionalValue<QString>(idKey); }
+ std::optional<QString> id() const { return optionalValue<QString>(idKey); }
void setId(const QString &id) { insert(idKey, id); }
void clearId() { remove(idKey); }
};
@@ -244,33 +244,33 @@ public:
// Defines how text documents are synced. Is either a detailed structure defining each
// notification or for backwards compatibility the TextDocumentSyncKind number.
using TextDocumentSync = std::variant<TextDocumentSyncOptions, int>;
- Utils::optional<TextDocumentSync> textDocumentSync() const;
+ std::optional<TextDocumentSync> textDocumentSync() const;
void setTextDocumentSync(const TextDocumentSync &textDocumentSync);
void clearTextDocumentSync() { remove(textDocumentSyncKey); }
TextDocumentSyncKind textDocumentSyncKindHelper();
// The server provides hover support.
- Utils::optional<std::variant<bool, WorkDoneProgressOptions>> hoverProvider() const;
+ std::optional<std::variant<bool, WorkDoneProgressOptions>> hoverProvider() const;
void setHoverProvider(const std::variant<bool, WorkDoneProgressOptions> &hoverProvider);
void clearHoverProvider() { remove(hoverProviderKey); }
// The server provides completion support.
- Utils::optional<CompletionOptions> completionProvider() const
+ std::optional<CompletionOptions> completionProvider() const
{ return optionalValue<CompletionOptions>(completionProviderKey); }
void setCompletionProvider(const CompletionOptions &completionProvider)
{ insert(completionProviderKey, completionProvider); }
void clearCompletionProvider() { remove(completionProviderKey); }
// The server provides signature help support.
- Utils::optional<SignatureHelpOptions> signatureHelpProvider() const
+ std::optional<SignatureHelpOptions> signatureHelpProvider() const
{ return optionalValue<SignatureHelpOptions>(signatureHelpProviderKey); }
void setSignatureHelpProvider(const SignatureHelpOptions &signatureHelpProvider)
{ insert(signatureHelpProviderKey, signatureHelpProvider); }
void clearSignatureHelpProvider() { remove(signatureHelpProviderKey); }
// The server provides goto definition support.
- Utils::optional<bool> definitionProvider() const
+ std::optional<bool> definitionProvider() const
{ return optionalValue<bool>(definitionProviderKey); }
void setDefinitionProvider(bool definitionProvider)
{ insert(definitionProviderKey, definitionProvider); }
@@ -291,7 +291,7 @@ public:
// The id used to register the request. The id can be used to deregister
// the request again. See also Registration#id.
- Utils::optional<QString> id() const { return optionalValue<QString>(idKey); }
+ std::optional<QString> id() const { return optionalValue<QString>(idKey); }
void setId(const QString &id) { insert(idKey, id); }
void clearId() { remove(idKey); }
@@ -299,42 +299,42 @@ public:
};
// The server provides Goto Type Definition support.
- Utils::optional<std::variant<bool, RegistrationOptions>> typeDefinitionProvider() const;
+ std::optional<std::variant<bool, RegistrationOptions>> typeDefinitionProvider() const;
void setTypeDefinitionProvider(const std::variant<bool, RegistrationOptions> &typeDefinitionProvider);
void clearTypeDefinitionProvider() { remove(typeDefinitionProviderKey); }
// The server provides Goto Implementation support.
- Utils::optional<std::variant<bool, RegistrationOptions>> implementationProvider() const;
+ std::optional<std::variant<bool, RegistrationOptions>> implementationProvider() const;
void setImplementationProvider(const std::variant<bool, RegistrationOptions> &implementationProvider);
void clearImplementationProvider() { remove(implementationProviderKey); }
// The server provides find references support.
- Utils::optional<std::variant<bool, WorkDoneProgressOptions>> referencesProvider() const;
+ std::optional<std::variant<bool, WorkDoneProgressOptions>> referencesProvider() const;
void setReferencesProvider(const std::variant<bool, WorkDoneProgressOptions> &referencesProvider);
void clearReferencesProvider() { remove(referencesProviderKey); }
// The server provides document highlight support.
- Utils::optional<std::variant<bool, WorkDoneProgressOptions>> documentHighlightProvider() const;
+ std::optional<std::variant<bool, WorkDoneProgressOptions>> documentHighlightProvider() const;
void setDocumentHighlightProvider(
const std::variant<bool, WorkDoneProgressOptions> &documentHighlightProvider);
void clearDocumentHighlightProvider() { remove(documentHighlightProviderKey); }
// The server provides document symbol support.
- Utils::optional<std::variant<bool, WorkDoneProgressOptions>> documentSymbolProvider() const;
+ std::optional<std::variant<bool, WorkDoneProgressOptions>> documentSymbolProvider() const;
void setDocumentSymbolProvider(std::variant<bool, WorkDoneProgressOptions> documentSymbolProvider);
void clearDocumentSymbolProvider() { remove(documentSymbolProviderKey); }
- Utils::optional<SemanticTokensOptions> semanticTokensProvider() const;
+ std::optional<SemanticTokensOptions> semanticTokensProvider() const;
void setSemanticTokensProvider(const SemanticTokensOptions &semanticTokensProvider);
void clearSemanticTokensProvider() { remove(semanticTokensProviderKey); }
// The server provides workspace symbol support.
- Utils::optional<std::variant<bool, WorkDoneProgressOptions>> workspaceSymbolProvider() const;
+ std::optional<std::variant<bool, WorkDoneProgressOptions>> workspaceSymbolProvider() const;
void setWorkspaceSymbolProvider(std::variant<bool, WorkDoneProgressOptions> workspaceSymbolProvider);
void clearWorkspaceSymbolProvider() { remove(workspaceSymbolProviderKey); }
// The server provides code actions.
- Utils::optional<std::variant<bool, CodeActionOptions>> codeActionProvider() const;
+ std::optional<std::variant<bool, CodeActionOptions>> codeActionProvider() const;
void setCodeActionProvider(bool codeActionProvider)
{ insert(codeActionProviderKey, codeActionProvider); }
void setCodeActionProvider(CodeActionOptions options)
@@ -342,20 +342,20 @@ public:
void clearCodeActionProvider() { remove(codeActionProviderKey); }
// The server provides code lens.
- Utils::optional<CodeLensOptions> codeLensProvider() const
+ std::optional<CodeLensOptions> codeLensProvider() const
{ return optionalValue<CodeLensOptions>(codeLensProviderKey); }
void setCodeLensProvider(CodeLensOptions codeLensProvider)
{ insert(codeLensProviderKey, codeLensProvider); }
void clearCodeLensProvider() { remove(codeLensProviderKey); }
// The server provides document formatting.
- Utils::optional<std::variant<bool, WorkDoneProgressOptions>> documentFormattingProvider() const;
+ std::optional<std::variant<bool, WorkDoneProgressOptions>> documentFormattingProvider() const;
void setDocumentFormattingProvider(
const std::variant<bool, WorkDoneProgressOptions> &documentFormattingProvider);
void clearDocumentFormattingProvider() { remove(documentFormattingProviderKey); }
// The server provides document formatting on typing.
- Utils::optional<std::variant<bool, WorkDoneProgressOptions>> documentRangeFormattingProvider() const;
+ std::optional<std::variant<bool, WorkDoneProgressOptions>> documentRangeFormattingProvider() const;
void setDocumentRangeFormattingProvider(std::variant<bool, WorkDoneProgressOptions> documentRangeFormattingProvider);
void clearDocumentRangeFormattingProvider() { remove(documentRangeFormattingProviderKey); }
@@ -365,30 +365,30 @@ public:
using WorkDoneProgressOptions::WorkDoneProgressOptions;
// Renames should be checked and tested before being executed.
- Utils::optional<bool> prepareProvider() const { return optionalValue<bool>(prepareProviderKey); }
+ std::optional<bool> prepareProvider() const { return optionalValue<bool>(prepareProviderKey); }
void setPrepareProvider(bool prepareProvider) { insert(prepareProviderKey, prepareProvider); }
void clearPrepareProvider() { remove(prepareProviderKey); }
};
// The server provides rename support.
- Utils::optional<std::variant<RenameOptions, bool>> renameProvider() const;
+ std::optional<std::variant<RenameOptions, bool>> renameProvider() const;
void setRenameProvider(std::variant<RenameOptions,bool> renameProvider);
void clearRenameProvider() { remove(renameProviderKey); }
// The server provides document link support.
- Utils::optional<DocumentLinkOptions> documentLinkProvider() const
+ std::optional<DocumentLinkOptions> documentLinkProvider() const
{ return optionalValue<DocumentLinkOptions>(documentLinkProviderKey); }
void setDocumentLinkProvider(const DocumentLinkOptions &documentLinkProvider)
{ insert(documentLinkProviderKey, documentLinkProvider); }
void clearDocumentLinkProvider() { remove(documentLinkProviderKey); }
// The server provides color provider support.
- Utils::optional<std::variant<bool, JsonObject>> colorProvider() const;
+ std::optional<std::variant<bool, JsonObject>> colorProvider() const;
void setColorProvider(std::variant<bool, JsonObject> colorProvider);
void clearColorProvider() { remove(colorProviderKey); }
// The server provides execute command support.
- Utils::optional<ExecuteCommandOptions> executeCommandProvider() const
+ std::optional<ExecuteCommandOptions> executeCommandProvider() const
{ return optionalValue<ExecuteCommandOptions>(executeCommandProviderKey); }
void setExecuteCommandProvider(ExecuteCommandOptions executeCommandProvider)
{ insert(executeCommandProviderKey, executeCommandProvider); }
@@ -405,29 +405,29 @@ public:
using JsonObject::JsonObject;
// The server has support for workspace folders
- Utils::optional<bool> supported() const { return optionalValue<bool>(supportedKey); }
+ std::optional<bool> supported() const { return optionalValue<bool>(supportedKey); }
void setSupported(bool supported) { insert(supportedKey, supported); }
void clearSupported() { remove(supportedKey); }
- Utils::optional<std::variant<QString, bool>> changeNotifications() const;
+ std::optional<std::variant<QString, bool>> changeNotifications() const;
void setChangeNotifications(std::variant<QString, bool> changeNotifications);
void clearChangeNotifications() { remove(changeNotificationsKey); }
};
- Utils::optional<WorkspaceFoldersCapabilities> workspaceFolders() const
+ std::optional<WorkspaceFoldersCapabilities> workspaceFolders() const
{ return optionalValue<WorkspaceFoldersCapabilities>(workspaceFoldersKey); }
void setWorkspaceFolders(const WorkspaceFoldersCapabilities &workspaceFolders)
{ insert(workspaceFoldersKey, workspaceFolders); }
void clearWorkspaceFolders() { remove(workspaceFoldersKey); }
};
- Utils::optional<WorkspaceServerCapabilities> workspace() const
+ std::optional<WorkspaceServerCapabilities> workspace() const
{ return optionalValue<WorkspaceServerCapabilities>(workspaceKey); }
void setWorkspace(const WorkspaceServerCapabilities &workspace)
{ insert(workspaceKey, workspace); }
void clearWorkspace() { remove(workspaceKey); }
- Utils::optional<JsonObject> experimental() const { return optionalValue<JsonObject>(experimentalKey); }
+ std::optional<JsonObject> experimental() const { return optionalValue<JsonObject>(experimentalKey); }
void setExperimental(const JsonObject &experimental) { insert(experimentalKey, experimental); }
void clearExperimental() { remove(experimentalKey); }
};
diff --git a/src/libs/languageserverprotocol/textsynchronization.h b/src/libs/languageserverprotocol/textsynchronization.h
index ada8843872..2f77fb26af 100644
--- a/src/libs/languageserverprotocol/textsynchronization.h
+++ b/src/libs/languageserverprotocol/textsynchronization.h
@@ -70,12 +70,12 @@ public:
using JsonObject::JsonObject;
// The range of the document that changed.
- Utils::optional<Range> range() const { return optionalValue<Range>(rangeKey); }
+ std::optional<Range> range() const { return optionalValue<Range>(rangeKey); }
void setRange(Range range) { insert(rangeKey, range); }
void clearRange() { remove(rangeKey); }
// The length of the range that got replaced.
- Utils::optional<int> rangeLength() const { return optionalValue<int>(rangeLengthKey); }
+ std::optional<int> rangeLength() const { return optionalValue<int>(rangeLengthKey); }
void setRangeLength(int rangeLength) { insert(rangeLengthKey, rangeLength); }
void clearRangeLength() { remove(rangeLengthKey); }
@@ -155,7 +155,7 @@ class LANGUAGESERVERPROTOCOL_EXPORT TextDocumentSaveRegistrationOptions
public:
using TextDocumentRegistrationOptions::TextDocumentRegistrationOptions;
- Utils::optional<bool> includeText() const { return optionalValue<bool>(includeTextKey); }
+ std::optional<bool> includeText() const { return optionalValue<bool>(includeTextKey); }
void setIncludeText(bool includeText) { insert(includeTextKey, includeText); }
void clearIncludeText() { remove(includeTextKey); }
};
@@ -172,7 +172,7 @@ public:
void setTextDocument(TextDocumentIdentifier textDocument)
{ insert(textDocumentKey, textDocument); }
- Utils::optional<QString> text() const { return optionalValue<QString>(textKey); }
+ std::optional<QString> text() const { return optionalValue<QString>(textKey); }
void setText(const QString &text) { insert(textKey, text); }
void clearText() { remove(textKey); }
diff --git a/src/libs/languageserverprotocol/workspace.h b/src/libs/languageserverprotocol/workspace.h
index 987a012515..158a6d948b 100644
--- a/src/libs/languageserverprotocol/workspace.h
+++ b/src/libs/languageserverprotocol/workspace.h
@@ -92,11 +92,11 @@ public:
public:
using JsonObject::JsonObject;
- Utils::optional<QString> scopeUri() const { return optionalValue<QString>(scopeUriKey); }
+ std::optional<QString> scopeUri() const { return optionalValue<QString>(scopeUriKey); }
void setScopeUri(const QString &scopeUri) { insert(scopeUriKey, scopeUri); }
void clearScopeUri() { remove(scopeUriKey); }
- Utils::optional<QString> section() const { return optionalValue<QString>(sectionKey); }
+ std::optional<QString> section() const { return optionalValue<QString>(sectionKey); }
void setSection(const QString &section) { insert(sectionKey, section); }
void clearSection() { remove(sectionKey); }
@@ -191,7 +191,7 @@ public:
void setCommand(const QString &command) { insert(commandKey, command); }
void clearCommand() { remove(commandKey); }
- Utils::optional<QJsonArray> arguments() const { return typedValue<QJsonArray>(argumentsKey); }
+ std::optional<QJsonArray> arguments() const { return typedValue<QJsonArray>(argumentsKey); }
void setArguments(const QJsonArray &arguments) { insert(argumentsKey, arguments); }
void clearArguments() { remove(argumentsKey); }
@@ -212,7 +212,7 @@ class LANGUAGESERVERPROTOCOL_EXPORT ApplyWorkspaceEditParams : public JsonObject
public:
using JsonObject::JsonObject;
- Utils::optional<QString> label() const { return optionalValue<QString>(labelKey); }
+ std::optional<QString> label() const { return optionalValue<QString>(labelKey); }
void setLabel(const QString &label) { insert(labelKey, label); }
void clearLabel() { remove(labelKey); }
diff --git a/src/libs/sqlite/sqlitealgorithms.h b/src/libs/sqlite/sqlitealgorithms.h
index bda904c0e8..9361be0b10 100644
--- a/src/libs/sqlite/sqlitealgorithms.h
+++ b/src/libs/sqlite/sqlitealgorithms.h
@@ -3,9 +3,9 @@
#pragma once
-#include <utils/optional.h>
#include <utils/smallstringview.h>
+#include <optional>
#include <type_traits>
namespace Sqlite {
@@ -34,7 +34,7 @@ void insertUpdateDelete(SqliteRange &&sqliteRange,
auto endSqliteIterator = sqliteRange.end();
auto currentValueIterator = values.begin();
auto endValueIterator = values.end();
- Utils::optional<std::decay_t<decltype(*currentValueIterator)>> lastValue;
+ std::optional<std::decay_t<decltype(*currentValueIterator)>> lastValue;
while (true) {
bool hasMoreValues = currentValueIterator != endValueIterator;
diff --git a/src/libs/sqlite/sqlitebasestatement.h b/src/libs/sqlite/sqlitebasestatement.h
index 6dba297282..236f5a0586 100644
--- a/src/libs/sqlite/sqlitebasestatement.h
+++ b/src/libs/sqlite/sqlitebasestatement.h
@@ -14,13 +14,13 @@
#include <utils/smallstringvector.h>
-#include <utils/optional.h>
#include <utils/span.h>
#include <cstdint>
#include <exception>
#include <functional>
#include <memory>
+#include <optional>
#include <tuple>
#include <type_traits>
@@ -225,12 +225,12 @@ public:
auto optionalValue(const QueryTypes &...queryValues)
{
Resetter resetter{this};
- Utils::optional<ResultType> resultValue;
+ std::optional<ResultType> resultValue;
bindValues(queryValues...);
if (BaseStatement::next())
- resultValue = createOptionalValue<Utils::optional<ResultType>>();
+ resultValue = createOptionalValue<std::optional<ResultType>>();
return resultValue;
}
@@ -495,7 +495,7 @@ private:
template<typename ResultOptionalType, int... ColumnIndices>
ResultOptionalType createOptionalValue(std::integer_sequence<int, ColumnIndices...>)
{
- return ResultOptionalType(Utils::in_place, ValueGetter(*this, ColumnIndices)...);
+ return ResultOptionalType(std::in_place, ValueGetter(*this, ColumnIndices)...);
}
template<typename ResultOptionalType>
diff --git a/src/libs/utils/CMakeLists.txt b/src/libs/utils/CMakeLists.txt
index 59987e8270..4f4d1063df 100644
--- a/src/libs/utils/CMakeLists.txt
+++ b/src/libs/utils/CMakeLists.txt
@@ -4,7 +4,6 @@ add_qtc_library(Utils
Qt5::Concurrent Qt5::Core Qt5::Network Qt5::Gui Qt5::Widgets
Qt6Core5Compat
SOURCES
- ../3rdparty/optional/optional.hpp
../3rdparty/span/span.hpp
QtConcurrentTools
algorithm.h
@@ -103,7 +102,6 @@ add_qtc_library(Utils
namevaluevalidator.cpp namevaluevalidator.h
navigationtreeview.cpp navigationtreeview.h
networkaccessmanager.cpp networkaccessmanager.h
- optional.h
osspecificaspects.h
outputformat.h
outputformatter.cpp outputformatter.h
diff --git a/src/libs/utils/algorithm.h b/src/libs/utils/algorithm.h
index c897353fcd..dd914103ee 100644
--- a/src/libs/utils/algorithm.h
+++ b/src/libs/utils/algorithm.h
@@ -4,7 +4,6 @@
#pragma once
#include "predicates.h"
-#include "optional.h"
#include <qcompilerdetection.h> // for Q_REQUIRED_RESULT
@@ -22,6 +21,7 @@
#include <QStringList>
#include <memory>
+#include <optional>
#include <type_traits>
namespace Utils
@@ -187,7 +187,7 @@ auto toConstReferences(const SourceContainer &sources);
// take
/////////////////////////
template<class C, typename P>
-Q_REQUIRED_RESULT optional<typename C::value_type> take(C &container, P predicate);
+Q_REQUIRED_RESULT std::optional<typename C::value_type> take(C &container, P predicate);
template<typename C, typename R, typename S>
Q_REQUIRED_RESULT decltype(auto) take(C &container, R S::*member);
template<typename C, typename R, typename S>
@@ -1066,15 +1066,15 @@ auto toConstReferences(const SourceContainer &sources)
/////////////////
template<class C, typename P>
-Q_REQUIRED_RESULT optional<typename C::value_type> take(C &container, P predicate)
+Q_REQUIRED_RESULT std::optional<typename C::value_type> take(C &container, P predicate)
{
const auto end = std::end(container);
const auto it = std::find_if(std::begin(container), end, predicate);
if (it == end)
- return nullopt;
+ return std::nullopt;
- optional<typename C::value_type> result = Utils::make_optional(std::move(*it));
+ std::optional<typename C::value_type> result = std::make_optional(std::move(*it));
container.erase(it);
return result;
}
diff --git a/src/libs/utils/archive.cpp b/src/libs/utils/archive.cpp
index b2d84a7cd7..7a3dd4b487 100644
--- a/src/libs/utils/archive.cpp
+++ b/src/libs/utils/archive.cpp
@@ -89,20 +89,20 @@ static QVector<Tool> toolsForFilePath(const FilePath &fp)
return toolsForMimeType(mimeTypeForFile(fp));
}
-static Utils::optional<Tool> resolveTool(const Tool &tool)
+static std::optional<Tool> resolveTool(const Tool &tool)
{
const FilePath executable =
tool.command.executable().withExecutableSuffix().searchInPath(tool.additionalSearchDirs);
Tool resolvedTool = tool;
resolvedTool.command.setExecutable(executable);
- return executable.isEmpty() ? Utils::nullopt : Utils::make_optional(resolvedTool);
+ return executable.isEmpty() ? std::nullopt : std::make_optional(resolvedTool);
}
-static Utils::optional<Tool> unzipTool(const FilePath &src, const FilePath &dest)
+static std::optional<Tool> unzipTool(const FilePath &src, const FilePath &dest)
{
const QVector<Tool> tools = toolsForFilePath(src);
for (const Tool &tool : tools) {
- const Utils::optional<Tool> resolvedTool = resolveTool(tool);
+ const std::optional<Tool> resolvedTool = resolveTool(tool);
if (resolvedTool) {
Tool result = *resolvedTool;
const QString srcStr = src.toString();
@@ -138,7 +138,7 @@ bool Archive::supportsFile(const FilePath &filePath, QString *reason)
Archive::Archive(const FilePath &src, const FilePath &dest)
{
- const Utils::optional<Tool> tool = unzipTool(src, dest);
+ const std::optional<Tool> tool = unzipTool(src, dest);
if (!tool)
return;
m_commandLine = tool->command;
diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp
index ba1fb790ad..45d0ee0fdd 100644
--- a/src/libs/utils/aspects.cpp
+++ b/src/libs/utils/aspects.cpp
@@ -656,8 +656,8 @@ public:
class IntegerAspectPrivate
{
public:
- Utils::optional<qint64> m_minimumValue;
- Utils::optional<qint64> m_maximumValue;
+ std::optional<qint64> m_minimumValue;
+ std::optional<qint64> m_maximumValue;
int m_displayIntegerBase = 10;
qint64 m_displayScaleFactor = 1;
QString m_prefix;
@@ -670,8 +670,8 @@ public:
class DoubleAspectPrivate
{
public:
- Utils::optional<double> m_minimumValue;
- Utils::optional<double> m_maximumValue;
+ std::optional<double> m_minimumValue;
+ std::optional<double> m_maximumValue;
QString m_prefix;
QString m_suffix;
QString m_specialValueText;
@@ -784,7 +784,7 @@ void StringAspect::setValue(const QString &val)
QString processedValue = val;
if (d->m_valueAcceptor) {
- const Utils::optional<QString> tmp = d->m_valueAcceptor(value(), val);
+ const std::optional<QString> tmp = d->m_valueAcceptor(value(), val);
if (!tmp) {
update(); // Make sure the original value is retained in the UI
return;
diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h
index eb6d242fd3..f46705dab1 100644
--- a/src/libs/utils/aspects.h
+++ b/src/libs/utils/aspects.h
@@ -7,11 +7,11 @@
#include "id.h"
#include "infolabel.h"
#include "macroexpander.h"
-#include "optional.h"
#include "pathchooser.h"
#include <functional>
#include <memory>
+#include <optional>
QT_BEGIN_NAMESPACE
class QAction;
@@ -337,7 +337,7 @@ public:
void emitChangedValue() override;
// Hook between UI and StringAspect:
- using ValueAcceptor = std::function<Utils::optional<QString>(const QString &, const QString &)>;
+ using ValueAcceptor = std::function<std::optional<QString>(const QString &, const QString &)>;
void setValueAcceptor(ValueAcceptor &&acceptor);
QString value() const;
void setValue(const QString &val);
diff --git a/src/libs/utils/environment.cpp b/src/libs/utils/environment.cpp
index 8131712341..d79c2dbe6c 100644
--- a/src/libs/utils/environment.cpp
+++ b/src/libs/utils/environment.cpp
@@ -406,12 +406,12 @@ const QVector<EnvironmentProvider> EnvironmentProvider::providers()
return *environmentProviders;
}
-optional<EnvironmentProvider> EnvironmentProvider::provider(const QByteArray &id)
+std::optional<EnvironmentProvider> EnvironmentProvider::provider(const QByteArray &id)
{
const int index = indexOf(*environmentProviders, equal(&EnvironmentProvider::id, id));
if (index >= 0)
- return make_optional(environmentProviders->at(index));
- return nullopt;
+ return std::make_optional(environmentProviders->at(index));
+ return std::nullopt;
}
void EnvironmentChange::addSetValue(const QString &key, const QString &value)
diff --git a/src/libs/utils/environment.h b/src/libs/utils/environment.h
index 137719ebdd..01b4a6e9bf 100644
--- a/src/libs/utils/environment.h
+++ b/src/libs/utils/environment.h
@@ -8,9 +8,9 @@
#include "environmentfwd.h"
#include "filepath.h"
#include "namevaluedictionary.h"
-#include "optional.h"
#include <functional>
+#include <optional>
QT_BEGIN_NAMESPACE
class QProcessEnvironment;
@@ -150,7 +150,7 @@ public:
static void addProvider(EnvironmentProvider &&provider);
static const QVector<EnvironmentProvider> providers();
- static optional<EnvironmentProvider> provider(const QByteArray &id);
+ static std::optional<EnvironmentProvider> provider(const QByteArray &id);
};
QTCREATOR_UTILS_EXPORT QString qtcEnvironmentVariable(const QString &key);
diff --git a/src/libs/utils/environmentdialog.cpp b/src/libs/utils/environmentdialog.cpp
index 4de3ac69b3..54350b69d0 100644
--- a/src/libs/utils/environmentdialog.cpp
+++ b/src/libs/utils/environmentdialog.cpp
@@ -7,7 +7,7 @@
namespace Utils {
-Utils::optional<EnvironmentItems> EnvironmentDialog::getEnvironmentItems(
+std::optional<EnvironmentItems> EnvironmentDialog::getEnvironmentItems(
QWidget *parent, const EnvironmentItems &initial, const QString &placeholderText, Polisher polisher)
{
return getNameValueItems(
diff --git a/src/libs/utils/environmentdialog.h b/src/libs/utils/environmentdialog.h
index e708d1d0f8..c80aa19fa3 100644
--- a/src/libs/utils/environmentdialog.h
+++ b/src/libs/utils/environmentdialog.h
@@ -15,7 +15,7 @@ class QTCREATOR_UTILS_EXPORT EnvironmentDialog : public NameValuesDialog
{
Q_OBJECT
public:
- static Utils::optional<EnvironmentItems> getEnvironmentItems(QWidget *parent = nullptr,
+ static std::optional<EnvironmentItems> getEnvironmentItems(QWidget *parent = nullptr,
const EnvironmentItems &initial = {},
const QString &placeholderText = {},
Polisher polish = {});
diff --git a/src/libs/utils/fancylineedit.cpp b/src/libs/utils/fancylineedit.cpp
index 1161414aad..f1f5f4d478 100644
--- a/src/libs/utils/fancylineedit.cpp
+++ b/src/libs/utils/fancylineedit.cpp
@@ -7,7 +7,6 @@
#include "execmenu.h"
#include "historycompleter.h"
#include "hostosinfo.h"
-#include "optional.h"
#include "qtcassert.h"
#include "utilsicons.h"
@@ -22,6 +21,8 @@
#include <QValidator>
#include <QWindow>
+#include <optional>
+
/*!
\class Utils::FancyLineEdit
@@ -202,7 +203,7 @@ FancyLineEdit::~FancyLineEdit()
void FancyLineEdit::setTextKeepingActiveCursor(const QString &text)
{
- optional<int> cursor = hasFocus() ? make_optional(cursorPosition()) : nullopt;
+ std::optional<int> cursor = hasFocus() ? std::make_optional(cursorPosition()) : std::nullopt;
setText(text);
if (cursor)
setCursorPosition(*cursor);
diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp
index 1cb1bc1623..93eaac5235 100644
--- a/src/libs/utils/filepath.cpp
+++ b/src/libs/utils/filepath.cpp
@@ -767,7 +767,7 @@ bool isWindowsDriveLetter(QChar ch) {
using RootAndPath = QPair<QStringView, QStringView>;
-optional<RootAndPath> windowsRootAndPath(const QStringView path)
+std::optional<RootAndPath> windowsRootAndPath(const QStringView path)
{
const QChar slash('/');
QStringView workPath = path;
@@ -799,7 +799,9 @@ optional<RootAndPath> windowsRootAndPath(const QStringView path)
void FilePath::setRootAndPath(QStringView path, OsType osType)
{
- optional<RootAndPath> windowsDriveAndPath = osType == OsType::OsTypeWindows ? windowsRootAndPath(path) : nullopt;
+ std::optional<RootAndPath> windowsDriveAndPath = osType == OsType::OsTypeWindows
+ ? windowsRootAndPath(path)
+ : std::nullopt;
if (path.startsWith(QLatin1String("/./"))) {
m_root = "";
diff --git a/src/libs/utils/fsengine/fileiconprovider.cpp b/src/libs/utils/fsengine/fileiconprovider.cpp
index 5076119799..b397cc9447 100644
--- a/src/libs/utils/fsengine/fileiconprovider.cpp
+++ b/src/libs/utils/fsengine/fileiconprovider.cpp
@@ -6,7 +6,6 @@
#include <utils/fileutils.h>
#include <utils/hostosinfo.h>
#include <utils/mimeutils.h>
-#include <utils/optional.h>
#include <utils/qtcassert.h>
#include <QApplication>
@@ -20,6 +19,7 @@
#include <QIcon>
#include <QLoggingCategory>
+#include <optional>
#include <variant>
using namespace Utils;
@@ -49,7 +49,7 @@ using Item = std::variant<QIcon, QString>; // icon or filename for the icon
namespace Utils {
namespace FileIconProvider {
-static Utils::optional<QIcon> getIcon(QHash<QString, Item> &cache, const QString &key)
+static std::optional<QIcon> getIcon(QHash<QString, Item> &cache, const QString &key)
{
auto it = cache.constFind(key);
if (it == cache.constEnd())
@@ -188,14 +188,14 @@ QIcon FileIconProviderImplementation::icon(const FilePath &filePath) const
// Check for cached overlay icons by file suffix.
const QString filename = !isDir ? filePath.fileName() : QString();
if (!filename.isEmpty()) {
- const Utils::optional<QIcon> icon = getIcon(m_filenameCache, filename);
+ const std::optional<QIcon> icon = getIcon(m_filenameCache, filename);
if (icon)
return *icon;
}
const QString suffix = !isDir ? filePath.suffix() : QString();
if (!suffix.isEmpty()) {
- const Utils::optional<QIcon> icon = getIcon(m_suffixCache, suffix);
+ const std::optional<QIcon> icon = getIcon(m_suffixCache, suffix);
if (icon)
return *icon;
}
diff --git a/src/libs/utils/hostosinfo.cpp b/src/libs/utils/hostosinfo.cpp
index 1876ee1154..2b424b273c 100644
--- a/src/libs/utils/hostosinfo.cpp
+++ b/src/libs/utils/hostosinfo.cpp
@@ -94,7 +94,7 @@ bool HostOsInfo::canCreateOpenGLContext(QString *errorMessage)
#endif
}
-optional<quint64> HostOsInfo::totalMemoryInstalledInBytes()
+std::optional<quint64> HostOsInfo::totalMemoryInstalledInBytes()
{
#ifdef Q_OS_LINUX
struct sysinfo info;
diff --git a/src/libs/utils/hostosinfo.h b/src/libs/utils/hostosinfo.h
index 11a07f2dbc..7626e3cacc 100644
--- a/src/libs/utils/hostosinfo.h
+++ b/src/libs/utils/hostosinfo.h
@@ -5,9 +5,10 @@
#include "utils_global.h"
-#include "optional.h"
#include "osspecificaspects.h"
+#include <optional>
+
QT_BEGIN_NAMESPACE
class QString;
QT_END_NAMESPACE
@@ -83,7 +84,7 @@ public:
static bool canCreateOpenGLContext(QString *errorMessage);
- static optional<quint64> totalMemoryInstalledInBytes();
+ static std::optional<quint64> totalMemoryInstalledInBytes();
private:
static Qt::CaseSensitivity m_overrideFileNameCaseSensitivity;
diff --git a/src/libs/utils/layoutbuilder.h b/src/libs/utils/layoutbuilder.h
index 215dc57fcc..92912bd57a 100644
--- a/src/libs/utils/layoutbuilder.h
+++ b/src/libs/utils/layoutbuilder.h
@@ -5,12 +5,13 @@
#include "utils_global.h"
-#include "optional.h"
#include <QList>
#include <QString>
#include <QVariant>
+#include <optional>
+
QT_BEGIN_NAMESPACE
class QLayout;
class QWidget;
@@ -143,7 +144,7 @@ protected:
LayoutItems m_items;
LayoutType m_layoutType;
- Utils::optional<int> m_spacing;
+ std::optional<int> m_spacing;
};
class QTCREATOR_UTILS_EXPORT LayoutExtender : public LayoutBuilder
diff --git a/src/libs/utils/linecolumn.h b/src/libs/utils/linecolumn.h
index d326d77032..70b715b7d4 100644
--- a/src/libs/utils/linecolumn.h
+++ b/src/libs/utils/linecolumn.h
@@ -5,10 +5,10 @@
#include "utils_global.h"
-#include "optional.h"
-
#include <QMetaType>
+#include <optional>
+
namespace Utils {
class QTCREATOR_UTILS_EXPORT LineColumn
@@ -39,7 +39,7 @@ public:
int column = -1;
};
-using OptionalLineColumn = optional<LineColumn>;
+using OptionalLineColumn = std::optional<LineColumn>;
} // namespace Utils
diff --git a/src/libs/utils/namevaluesdialog.cpp b/src/libs/utils/namevaluesdialog.cpp
index 5e6c57ac2a..195871e505 100644
--- a/src/libs/utils/namevaluesdialog.cpp
+++ b/src/libs/utils/namevaluesdialog.cpp
@@ -106,7 +106,7 @@ void NameValuesDialog::setPlaceholderText(const QString &text)
m_editor->setPlaceholderText(text);
}
-Utils::optional<NameValueItems> NameValuesDialog::getNameValueItems(QWidget *parent,
+std::optional<NameValueItems> NameValuesDialog::getNameValueItems(QWidget *parent,
const NameValueItems &initial,
const QString &placeholderText,
Polisher polisher,
diff --git a/src/libs/utils/namevaluesdialog.h b/src/libs/utils/namevaluesdialog.h
index 2dc0c5a757..a0bfb253c4 100644
--- a/src/libs/utils/namevaluesdialog.h
+++ b/src/libs/utils/namevaluesdialog.h
@@ -6,12 +6,12 @@
#include "utils_global.h"
#include "namevalueitem.h"
-#include "optional.h"
#include <QDialog>
#include <functional>
#include <memory>
+#include <optional>
QT_BEGIN_NAMESPACE
class QPlainTextEdit;
@@ -46,7 +46,7 @@ public:
void setPlaceholderText(const QString &text);
using Polisher = std::function<void(QWidget *)>;
- static Utils::optional<NameValueItems> getNameValueItems(QWidget *parent = nullptr,
+ static std::optional<NameValueItems> getNameValueItems(QWidget *parent = nullptr,
const NameValueItems &initial = {},
const QString &placeholderText = {},
Polisher polish = {},
diff --git a/src/libs/utils/optional.h b/src/libs/utils/optional.h
deleted file mode 100644
index 0613ea49d5..0000000000
--- a/src/libs/utils/optional.h
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
-
-#pragma once
-
-/*
- optional<T>
- make_optional(t)
-
- See std(::experimental)::optional.
-*/
-
-// std::optional from Apple's Clang supports methods that throw std::bad_optional_access only
-// with deployment target >= macOS 10.14
-// TODO: Use std::optional everywhere when we can require macOS 10.14
-#if !defined(__apple_build_version__)
-
-#include <optional>
-
-namespace Utils {
-
-using std::optional;
-using std::nullopt;
-using std::nullopt_t;
-using std::in_place;
-
-// make_optional is a copy, since there is no sensible way to import functions in C++
-template<class T>
-constexpr optional<std::decay_t<T>> make_optional(T &&v)
-{
- return optional<std::decay_t<T>>(std::forward<T>(v));
-}
-
-template<class T, class... Args>
-optional<T> make_optional(Args &&... args)
-{
- return optional<T>(in_place, std::forward<Args>(args)...);
-}
-
-template<class T, class Up, class... Args>
-constexpr optional<T> make_optional(std::initializer_list<Up> il, Args &&... args)
-{
- return optional<T>(in_place, il, std::forward<Args>(args)...);
-}
-
-} // namespace Utils
-
-#else
-
-#include <3rdparty/optional/optional.hpp>
-
-namespace Utils {
-
-// --> Utils::optional
-using std::experimental::optional;
-// --> Utils::nullopt
-using std::experimental::nullopt;
-using std::experimental::nullopt_t;
-// --> Utils::in_place
-using std::experimental::in_place;
-
-// TODO: make_optional is a copy, since there is no sensible way to import functions in C++
-template <class T>
-constexpr optional<typename std::decay<T>::type> make_optional(T&& v)
-{
- return optional<typename std::decay<T>::type>(std::experimental::constexpr_forward<T>(v));
-}
-
-template <class X>
-constexpr optional<X&> make_optional(std::reference_wrapper<X> v)
-{
- return optional<X&>(v.get());
-}
-
-} // Utils
-
-#endif
diff --git a/src/libs/utils/outputformatter.cpp b/src/libs/utils/outputformatter.cpp
index ffb749bb52..2d65f8919c 100644
--- a/src/libs/utils/outputformatter.cpp
+++ b/src/libs/utils/outputformatter.cpp
@@ -197,7 +197,7 @@ public:
QTextCursor cursor;
AnsiEscapeCodeHandler escapeCodeHandler;
QPair<QString, OutputFormat> incompleteLine;
- optional<QTextCharFormat> formatOverride;
+ std::optional<QTextCharFormat> formatOverride;
QList<OutputLineParser *> lineParsers;
OutputLineParser *nextParser = nullptr;
FileInProjectFinder fileFinder;
diff --git a/src/libs/utils/outputformatter.h b/src/libs/utils/outputformatter.h
index e01371ed0b..3a31d97d26 100644
--- a/src/libs/utils/outputformatter.h
+++ b/src/libs/utils/outputformatter.h
@@ -6,12 +6,12 @@
#include "utils_global.h"
#include "filepath.h"
-#include "optional.h"
#include "outputformat.h"
#include <QObject>
#include <functional>
+#include <optional>
QT_BEGIN_NAMESPACE
class QPlainTextEdit;
@@ -44,13 +44,19 @@ public:
using LinkSpecs = QList<LinkSpec>;
class Result {
public:
- Result(Status s, const LinkSpecs &l = {}, const optional<QString> &c = {},
- const optional<OutputFormat> &f = {})
- : status(s), linkSpecs(l), newContent(c), formatOverride(f) {}
+ Result(Status s,
+ const LinkSpecs &l = {},
+ const std::optional<QString> &c = {},
+ const std::optional<OutputFormat> &f = {})
+ : status(s)
+ , linkSpecs(l)
+ , newContent(c)
+ , formatOverride(f)
+ {}
Status status;
LinkSpecs linkSpecs;
- optional<QString> newContent; // Hard content override. Only to be used in extreme cases.
- optional<OutputFormat> formatOverride;
+ std::optional<QString> newContent; // Hard content override. Only to be used in extreme cases.
+ std::optional<OutputFormat> formatOverride;
};
static bool isLinkTarget(const QString &target);
diff --git a/src/libs/utils/pointeralgorithm.h b/src/libs/utils/pointeralgorithm.h
index ca5b797460..0a790f5b17 100644
--- a/src/libs/utils/pointeralgorithm.h
+++ b/src/libs/utils/pointeralgorithm.h
@@ -253,13 +253,13 @@ auto toRawPointer(const SourceContainer &sources)
// take:
/////////////////
template<typename C>
-Q_REQUIRED_RESULT optional<ValueType<C>> take(C &container, PointerType<C> p)
+Q_REQUIRED_RESULT std::optional<ValueType<C>> take(C &container, PointerType<C> p)
{
return take(container, [p](const ValueType<C> &v) { return v.get() == p; });
}
-template <typename C>
-Q_REQUIRED_RESULT optional<ValueType<C>> take(C &container, std::nullptr_t)
+template<typename C>
+Q_REQUIRED_RESULT std::optional<ValueType<C>> take(C &container, std::nullptr_t)
{
return take(container, static_cast<PointerType<C>>(nullptr));
}
diff --git a/src/libs/utils/runextensions.h b/src/libs/utils/runextensions.h
index 131d1f24cc..ba779e131f 100644
--- a/src/libs/utils/runextensions.h
+++ b/src/libs/utils/runextensions.h
@@ -6,7 +6,6 @@
#include "utils_global.h"
#include "functiontraits.h"
-#include "optional.h"
#include <QCoreApplication>
#include <QFuture>
@@ -17,6 +16,7 @@
#include <QThreadPool>
#include <functional>
+#include <optional>
// hasCallOperator & Co must be outside of any namespace
// because of internal compiler error with MSVC2015 Update 2
@@ -38,7 +38,7 @@ struct hasCallOperator
namespace Utils {
-using StackSizeInBytes = optional<uint>;
+using StackSizeInBytes = std::optional<uint>;
namespace Internal {
diff --git a/src/libs/utils/settingsaccessor.cpp b/src/libs/utils/settingsaccessor.cpp
index 02aa55dfa4..ff9cb114f1 100644
--- a/src/libs/utils/settingsaccessor.cpp
+++ b/src/libs/utils/settingsaccessor.cpp
@@ -68,7 +68,7 @@ QVariantMap SettingsAccessor::restoreSettings(QWidget *parent) const
*/
bool SettingsAccessor::saveSettings(const QVariantMap &data, QWidget *parent) const
{
- const optional<Issue> result = writeData(m_baseFilePath, data, parent);
+ const std::optional<Issue> result = writeData(m_baseFilePath, data, parent);
const ProceedInfo pi = result ? reportIssues(result.value(), m_baseFilePath, parent) : ProceedInfo::Continue;
return pi == ProceedInfo::Continue;
@@ -89,8 +89,9 @@ SettingsAccessor::RestoreData SettingsAccessor::readData(const FilePath &path, Q
/*!
* Store the \a data in \a path on disk. Do all the necessary preprocessing of the data.
*/
-optional<SettingsAccessor::Issue>
-SettingsAccessor::writeData(const FilePath &path, const QVariantMap &data, QWidget *parent) const
+std::optional<SettingsAccessor::Issue> SettingsAccessor::writeData(const FilePath &path,
+ const QVariantMap &data,
+ QWidget *parent) const
{
Q_UNUSED(parent)
return writeFile(path, prepareToWriteSettings(data));
@@ -134,8 +135,8 @@ SettingsAccessor::RestoreData SettingsAccessor::readFile(const FilePath &path) c
*
* This method does not do *any* processing of the file contents.
*/
-optional<SettingsAccessor::Issue>
-SettingsAccessor::writeFile(const FilePath &path, const QVariantMap &data) const
+std::optional<SettingsAccessor::Issue> SettingsAccessor::writeFile(const FilePath &path,
+ const QVariantMap &data) const
{
if (data.isEmpty()) {
return Issue(QCoreApplication::translate("Utils::SettingsAccessor", "Failed to Write File"),
@@ -216,11 +217,12 @@ int BackUpStrategy::compare(const SettingsAccessor::RestoreData &data1,
return 0;
}
-optional<FilePath>
-BackUpStrategy::backupName(const QVariantMap &oldData, const FilePath &path, const QVariantMap &data) const
+std::optional<FilePath> BackUpStrategy::backupName(const QVariantMap &oldData,
+ const FilePath &path,
+ const QVariantMap &data) const
{
if (oldData == data)
- return nullopt;
+ return std::nullopt;
return path.stringAppended(".bak");
}
@@ -266,9 +268,9 @@ BackingUpSettingsAccessor::readData(const FilePath &path, QWidget *parent) const
return result;
}
-optional<SettingsAccessor::Issue>
-BackingUpSettingsAccessor::writeData(const FilePath &path, const QVariantMap &data,
- QWidget *parent) const
+std::optional<SettingsAccessor::Issue> BackingUpSettingsAccessor::writeData(const FilePath &path,
+ const QVariantMap &data,
+ QWidget *parent) const
{
if (data.isEmpty())
return {};
@@ -307,8 +309,11 @@ void BackingUpSettingsAccessor::backupFile(const FilePath &path, const QVariantM
return;
// Do we need to do a backup?
- if (optional<FilePath> backupFileName = m_strategy->backupName(oldSettings.data, path, data))
+ if (std::optional<FilePath> backupFileName = m_strategy->backupName(oldSettings.data,
+ path,
+ data)) {
path.copyFile(backupFileName.value());
+ }
}
// --------------------------------------------------------------------
@@ -337,8 +342,9 @@ int VersionedBackUpStrategy::compare(const SettingsAccessor::RestoreData &data1,
return -1;
}
-optional<FilePath>
-VersionedBackUpStrategy::backupName(const QVariantMap &oldData, const FilePath &path, const QVariantMap &data) const
+std::optional<FilePath> VersionedBackUpStrategy::backupName(const QVariantMap &oldData,
+ const FilePath &path,
+ const QVariantMap &data) const
{
Q_UNUSED(data)
FilePath backupName = path;
@@ -356,7 +362,7 @@ VersionedBackUpStrategy::backupName(const QVariantMap &oldData, const FilePath &
backupName = backupName.stringAppended('.' + QString::number(oldVersion));
}
if (backupName == path)
- return nullopt;
+ return std::nullopt;
return backupName;
}
@@ -590,7 +596,7 @@ SettingsAccessor::RestoreData MergingSettingsAccessor::readData(const FilePath &
if (mainData.hasIssue()) {
if (reportIssues(mainData.issue.value(), mainData.path, parent) == DiscardAndContinue)
mainData.data.clear();
- mainData.issue = nullopt;
+ mainData.issue = std::nullopt;
}
RestoreData secondaryData
@@ -628,7 +634,7 @@ SettingsAccessor::RestoreData MergingSettingsAccessor::readData(const FilePath &
if (secondaryData.hasIssue()) {
if (reportIssues(secondaryData.issue.value(), secondaryData.path, parent) == DiscardAndContinue)
secondaryData.data.clear();
- secondaryData.issue = nullopt;
+ secondaryData.issue = std::nullopt;
}
if (!secondaryData.data.isEmpty())
@@ -736,7 +742,7 @@ static QVariant mergeQVariantMapsRecursion(const QVariantMap &mainTree, const QV
global.key = keyPrefix + key;
local.key = key;
- optional<QPair<QString, QVariant>> mergeResult = merge(global, local);
+ std::optional<QPair<QString, QVariant>> mergeResult = merge(global, local);
if (!mergeResult)
continue;
diff --git a/src/libs/utils/settingsaccessor.h b/src/libs/utils/settingsaccessor.h
index 07c06992cd..bf8b15ce94 100644
--- a/src/libs/utils/settingsaccessor.h
+++ b/src/libs/utils/settingsaccessor.h
@@ -6,13 +6,13 @@
#include "utils_global.h"
#include "filepath.h"
-#include "optional.h"
#include <QHash>
#include <QMessageBox>
#include <QVariantMap>
#include <memory>
+#include <optional>
namespace Utils {
@@ -41,7 +41,7 @@ QTCREATOR_UTILS_EXPORT void setOriginalVersionInMap(QVariantMap &data, int versi
QTCREATOR_UTILS_EXPORT void setSettingsIdInMap(QVariantMap &data, const QByteArray &id);
class PersistentSettingsWriter;
-using SettingsMergeResult = optional<QPair<QString, QVariant>>;
+using SettingsMergeResult = std::optional<QPair<QString, QVariant>>;
// --------------------------------------------------------------------
// SettingsAccessor:
@@ -89,7 +89,7 @@ public:
FilePath path;
QVariantMap data;
- optional<Issue> issue;
+ std::optional<Issue> issue;
};
QVariantMap restoreSettings(QWidget *parent) const;
@@ -104,7 +104,9 @@ public:
FilePath baseFilePath() const { return m_baseFilePath; }
virtual RestoreData readData(const FilePath &path, QWidget *parent) const;
- virtual optional<Issue> writeData(const FilePath &path, const QVariantMap &data, QWidget *parent) const;
+ virtual std::optional<Issue> writeData(const FilePath &path,
+ const QVariantMap &data,
+ QWidget *parent) const;
protected:
// Report errors:
@@ -115,7 +117,7 @@ protected:
virtual QVariantMap prepareToWriteSettings(const QVariantMap &data) const;
virtual RestoreData readFile(const FilePath &path) const;
- virtual optional<Issue> writeFile(const FilePath &path, const QVariantMap &data) const;
+ virtual std::optional<Issue> writeFile(const FilePath &path, const QVariantMap &data) const;
private:
FilePath m_baseFilePath;
@@ -138,8 +140,9 @@ public:
virtual int compare(const SettingsAccessor::RestoreData &data1,
const SettingsAccessor::RestoreData &data2) const;
- virtual optional<FilePath>
- backupName(const QVariantMap &oldData, const FilePath &path, const QVariantMap &data) const;
+ virtual std::optional<FilePath> backupName(const QVariantMap &oldData,
+ const FilePath &path,
+ const QVariantMap &data) const;
};
class QTCREATOR_UTILS_EXPORT BackingUpSettingsAccessor : public SettingsAccessor
@@ -151,8 +154,9 @@ public:
const QString &displayName, const QString &applicationDisplayName);
RestoreData readData(const FilePath &path, QWidget *parent) const override;
- optional<Issue> writeData(const FilePath &path, const QVariantMap &data,
- QWidget *parent) const override;
+ std::optional<Issue> writeData(const FilePath &path,
+ const QVariantMap &data,
+ QWidget *parent) const override;
BackUpStrategy *strategy() const { return m_strategy.get(); }
@@ -180,8 +184,9 @@ public:
int compare(const SettingsAccessor::RestoreData &data1,
const SettingsAccessor::RestoreData &data2) const override;
- optional<FilePath>
- backupName(const QVariantMap &oldData, const FilePath &path, const QVariantMap &data) const override;
+ std::optional<FilePath> backupName(const QVariantMap &oldData,
+ const FilePath &path,
+ const QVariantMap &data) const override;
const UpgradingSettingsAccessor *accessor() const { return m_accessor; }
diff --git a/src/libs/utils/utils.qbs b/src/libs/utils/utils.qbs
index 8da82286b1..983facc11e 100644
--- a/src/libs/utils/utils.qbs
+++ b/src/libs/utils/utils.qbs
@@ -202,8 +202,6 @@ Project {
"navigationtreeview.h",
"networkaccessmanager.cpp",
"networkaccessmanager.h",
- "optional.h",
- "../3rdparty/optional/optional.hpp",
"osspecificaspects.h",
"outputformat.h",
"outputformatter.cpp",