[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/company 40f5045 5/6: Merge branch 'yyoncho-icons2'
From: |
ELPA Syncer |
Subject: |
[elpa] externals/company 40f5045 5/6: Merge branch 'yyoncho-icons2' |
Date: |
Fri, 26 Mar 2021 21:57:09 -0400 (EDT) |
branch: externals/company
commit 40f504596cd90a8d20fca0ab609b6840fc589958
Merge: 613541e 8f73311
Author: Dmitry Gutov <dgutov@yandex.ru>
Commit: Dmitry Gutov <dgutov@yandex.ru>
Merge branch 'yyoncho-icons2'
---
Makefile | 6 +-
NEWS.md | 4 +
company-capf.el | 4 +
company.el | 109 ++++++-
icons/LICENSE | 395 ++++++++++++++++++++++++
icons/attribution.md | 5 +
icons/vscode-dark/symbol-array.png | Bin 0 -> 386 bytes
icons/vscode-dark/symbol-boolean.png | Bin 0 -> 563 bytes
icons/vscode-dark/symbol-class.png | Bin 0 -> 746 bytes
icons/vscode-dark/symbol-color.png | Bin 0 -> 1072 bytes
icons/vscode-dark/symbol-constant.png | Bin 0 -> 334 bytes
icons/vscode-dark/symbol-enumerator-member.png | Bin 0 -> 548 bytes
icons/vscode-dark/symbol-enumerator.png | Bin 0 -> 592 bytes
icons/vscode-dark/symbol-event.png | Bin 0 -> 781 bytes
icons/vscode-dark/symbol-field.png | Bin 0 -> 767 bytes
icons/vscode-dark/symbol-interface.png | Bin 0 -> 550 bytes
icons/vscode-dark/symbol-key.png | Bin 0 -> 638 bytes
icons/vscode-dark/symbol-keyword.png | Bin 0 -> 477 bytes
icons/vscode-dark/symbol-method.png | Bin 0 -> 791 bytes
icons/vscode-dark/symbol-misc.png | Bin 0 -> 728 bytes
icons/vscode-dark/symbol-namespace.png | Bin 0 -> 583 bytes
icons/vscode-dark/symbol-numeric.png | Bin 0 -> 491 bytes
icons/vscode-dark/symbol-operator.png | Bin 0 -> 655 bytes
icons/vscode-dark/symbol-parameter.png | Bin 0 -> 503 bytes
icons/vscode-dark/symbol-property.png | Bin 0 -> 924 bytes
icons/vscode-dark/symbol-ruler.png | Bin 0 -> 398 bytes
icons/vscode-dark/symbol-snippet.png | Bin 0 -> 340 bytes
icons/vscode-dark/symbol-string.png | Bin 0 -> 557 bytes
icons/vscode-dark/symbol-structure.png | Bin 0 -> 536 bytes
icons/vscode-dark/symbol-variable.png | Bin 0 -> 630 bytes
icons/vscode-light/symbol-array.png | Bin 0 -> 382 bytes
icons/vscode-light/symbol-boolean.png | Bin 0 -> 571 bytes
icons/vscode-light/symbol-class.png | Bin 0 -> 687 bytes
icons/vscode-light/symbol-color.png | Bin 0 -> 1058 bytes
icons/vscode-light/symbol-constant.png | Bin 0 -> 362 bytes
icons/vscode-light/symbol-enumerator-member.png | Bin 0 -> 536 bytes
icons/vscode-light/symbol-enumerator.png | Bin 0 -> 554 bytes
icons/vscode-light/symbol-event.png | Bin 0 -> 728 bytes
icons/vscode-light/symbol-field.png | Bin 0 -> 740 bytes
icons/vscode-light/symbol-interface.png | Bin 0 -> 540 bytes
icons/vscode-light/symbol-key.png | Bin 0 -> 652 bytes
icons/vscode-light/symbol-keyword.png | Bin 0 -> 449 bytes
icons/vscode-light/symbol-method.png | Bin 0 -> 823 bytes
icons/vscode-light/symbol-misc.png | Bin 0 -> 729 bytes
icons/vscode-light/symbol-namespace.png | Bin 0 -> 597 bytes
icons/vscode-light/symbol-numeric.png | Bin 0 -> 464 bytes
icons/vscode-light/symbol-operator.png | Bin 0 -> 687 bytes
icons/vscode-light/symbol-parameter.png | Bin 0 -> 500 bytes
icons/vscode-light/symbol-property.png | Bin 0 -> 905 bytes
icons/vscode-light/symbol-ruler.png | Bin 0 -> 432 bytes
icons/vscode-light/symbol-snippet.png | Bin 0 -> 343 bytes
icons/vscode-light/symbol-string.png | Bin 0 -> 563 bytes
icons/vscode-light/symbol-structure.png | Bin 0 -> 522 bytes
icons/vscode-light/symbol-variable.png | Bin 0 -> 633 bytes
test/frontends-tests.el | 38 +++
55 files changed, 554 insertions(+), 7 deletions(-)
diff --git a/Makefile b/Makefile
index 015f3ac..9357506 100644
--- a/Makefile
+++ b/Makefile
@@ -21,11 +21,15 @@ clean:
test:
${EMACS} -Q -nw -L . -l test/all.el \
+ --eval "(let (pop-up-windows) (ert '(not (tag gui))))"
+
+test-gui:
+ ${EMACS} -Q -L . -l test/all.el \
--eval "(let (pop-up-windows) (ert t))"
test-batch:
${EMACS} -Q --batch -L . -l test/all.el \
- --eval "(ert-run-tests-batch-and-exit '(not (tag interactive)))"
+ --eval "(ert-run-tests-batch-and-exit '(not (or (tag interactive) (tag
gui))))"
compile:
${EMACS} -Q --batch -L . -f batch-byte-compile company.el company-*.el
diff --git a/NEWS.md b/NEWS.md
index 30f979c..0a596fc 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -2,6 +2,10 @@
## Next
+* Added support for icons.
+ ([#1070](https://github.com/company-mode/company-mode/pull/1070)).
+ `company-format-margin-function` has been added.
+ Added new backend command `kind`.
* New user option `company-abort-on-unique-match`
([#1046](https://github.com/company-mode/company-mode/issues/1046)).
* `company-select-mouse` is a new frontend action
diff --git a/company-capf.el b/company-capf.el
index 7d34f9c..496cd57 100644
--- a/company-capf.el
+++ b/company-capf.el
@@ -151,6 +151,10 @@ so we can't just use the preceding variable instead.")
(let ((f (plist-get (nthcdr 4 company-capf--current-completion-data)
:annotation-function)))
(when f (funcall f arg))))
+ (`kind
+ (let ((f (plist-get (nthcdr 4 company-capf--current-completion-data)
+ :company-kind)))
+ (when f (funcall f arg))))
(`require-match
(plist-get (nthcdr 4 (company--capf-data)) :company-require-match))
(`init nil) ;Don't bother: plenty of other ways to initialize the
code.
diff --git a/company.el b/company.el
index 495cde1..149e15b 100644
--- a/company.el
+++ b/company.el
@@ -442,6 +442,10 @@ completion.
into the buffer. The second argument is the candidate. Can be used to
modify it, e.g. to expand a snippet.
+`kind': The second argument is a completion candidate. Return a symbol
+describing the kind of the candidate. Refer `company-vscode-icons-mapping' for
+the possible values.
+
The backend should return nil for all commands it does not support or
does not know about. It should also be callable interactively and use
`company-begin-backend' to start itself in that case.
@@ -1390,6 +1394,90 @@ end of the match."
(const :tag "Prefer closest in any direction"
company-occurrence-prefer-any-closest)))
+(defvar company-vscode-icons-mapping
+ '((array . "symbol-array.png")
+ (boolean . "symbol-boolean.png")
+ (class . "symbol-class.png")
+ (color . "symbol-color.png")
+ (constant . "symbol-constant.png")
+ (enum-member . "symbol-enumerator-member.png")
+ (enum . "symbol-enumerator.png")
+ (event . "symbol-event.png")
+ (field . "symbol-field.png")
+ (interface . "symbol-interface.png")
+ (key . "symbol-key.png")
+ (keyword . "symbol-keyword.png")
+ (method . "symbol-method.png")
+ (function . "symbol-method.png")
+ (misc . "symbol-misc.png")
+ (module . "symbol-namespace.png")
+ (numeric . "symbol-numeric.png")
+ (operator . "symbol-operator.png")
+ (parameter . "symbol-parameter.png")
+ (property . "symbol-property.png")
+ (ruler . "symbol-ruler.png")
+ (snippet . "symbol-snippet.png")
+ (string . "symbol-string.png")
+ (struct . "symbol-structure.png")
+ (variable . "symbol-variable.png")))
+
+(defconst company-icons-root
+ (file-name-as-directory
+ (expand-file-name "icons"
+ (file-name-directory (or load-file-name
buffer-file-name)))))
+
+(defcustom company-icon-size 30
+ "Default icons size."
+ :type 'integer)
+
+(defun company--icons-margin-function (icon-mapping root-dir candidate
selected)
+ (if-let ((candidate candidate)
+ (kind (company-call-backend 'kind candidate))
+ (icon-file (alist-get kind icon-mapping)))
+ (let* ((bkg (face-attribute (if selected
+ 'company-tooltip-selection
+ 'company-tooltip)
+ :background))
+ (spec (list 'image
+ :file (expand-file-name icon-file root-dir)
+ :type 'png
+ :width company-icon-size
+ :height company-icon-size
+ :ascent 'center
+ :background (unless (eq bkg 'unspecified)
+ bkg))))
+ (concat
+ (propertize " " 'display spec)
+ (propertize " " 'display `(space . (:width ,(- 2 (car (image-size
spec))))))))
+ " "))
+
+(defun company-vscode-dark-icons-margin-function (candidate selected)
+ "Margin function which returns icons from vscode's dark theme."
+ (company--icons-margin-function company-vscode-icons-mapping
+ (expand-file-name "vscode-dark"
company-icons-root)
+ candidate
+ selected))
+
+(defun company-vscode-light-icons-margin-function (candidate selected)
+ "Margin function which returns icons from vscode's light theme."
+ (company--icons-margin-function company-vscode-icons-mapping
+ (expand-file-name "vscode-light"
company-icons-root)
+ candidate
+ selected))
+
+(defcustom company-format-margin-function nil
+ "Function to format the margin.
+It accepts 2 params `candidate' and `selected' and can be used for
+inserting prefix/image before the completion items. Typically, the
+functions call the backends with `kind' and then insert the appropriate
+image for the returned kind image. Function is called with (nil nil) to get
+the default margin."
+ :type '(choice
+ (const :tag "Disabled" nil)
+ (const :tag "VScode dark icons theme"
company-vscode-dark-icons-margin-function)
+ (const :tag "VScode light icons theme"
company-vscode-light-icons-margin-function)
+ (function :tag "Custom icon function.")))
+
(defun company-occurrence-prefer-closest-above (pos match-beg match-end)
"Give priority to the matches above point, then those below point."
(if (< match-beg pos)
@@ -2781,7 +2869,10 @@ If SHOW-VERSION is non-nil, show the version in the echo
area."
face)))))
(defun company--replacement-string (lines old column nl &optional align-top)
- (cl-decf column company-tooltip-margin)
+ (cl-decf column (or (when company-format-margin-function
+ (when-let (margin (funcall
company-format-margin-function nil nil))
+ (length margin)))
+ company-tooltip-margin))
(when (and align-top company-tooltip-flip-when-above)
(setq lines (reverse lines)))
@@ -2878,9 +2969,13 @@ If SHOW-VERSION is non-nil, show the version in the echo
area."
(cl-decf window-width (* 2 company-tooltip-margin))
(when scrollbar-bounds (cl-decf window-width))
- (dotimes (_ len)
+ (dotimes (i len)
(let* ((value (pop lines-copy))
- (annotation (company-call-backend 'annotation value)))
+ (annotation (company-call-backend 'annotation value))
+ (candidate-prefix (when company-format-margin-function
+ (funcall company-format-margin-function
+ value
+ (equal selection i)))))
(setq value (company--clean-string value))
(when annotation
(setq annotation (company--clean-string annotation))
@@ -2888,8 +2983,9 @@ If SHOW-VERSION is non-nil, show the version in the echo
area."
;; `lisp-completion-at-point' adds a space.
;; FIXME: Use `string-trim' in Emacs 24.4
(setq annotation (comment-string-strip annotation t nil))))
- (push (cons value annotation) items)
+ (push (list value annotation candidate-prefix) items)
(setq width (max (+ (length value)
+ (length candidate-prefix)
(if (and annotation
company-tooltip-align-annotations)
(1+ (length annotation))
(length annotation)))
@@ -2915,9 +3011,10 @@ If SHOW-VERSION is non-nil, show the version in the echo
area."
(dotimes (i len)
(let* ((item (pop items))
(str (car item))
- (annotation (cdr item))
+ (annotation (cadr item))
+ (candidate-prefix (caddr item))
(margin (company-space-string company-tooltip-margin))
- (left margin)
+ (left (or candidate-prefix margin))
(right margin)
(width width))
(when (< numbered 10)
diff --git a/icons/LICENSE b/icons/LICENSE
new file mode 100644
index 0000000..52bd145
--- /dev/null
+++ b/icons/LICENSE
@@ -0,0 +1,395 @@
+Attribution 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+ Considerations for licensors: Our public licenses are
+ intended for use by those authorized to give the public
+ permission to use material in ways otherwise restricted by
+ copyright and certain other rights. Our licenses are
+ irrevocable. Licensors should read and understand the terms
+ and conditions of the license they choose before applying it.
+ Licensors should also secure all rights necessary before
+ applying our licenses so that the public can reuse the
+ material as expected. Licensors should clearly mark any
+ material not subject to the license. This includes other CC-
+ licensed material, or material used under an exception or
+ limitation to copyright. More considerations for licensors:
+ wiki.creativecommons.org/Considerations_for_licensors
+
+ Considerations for the public: By using one of our public
+ licenses, a licensor grants the public permission to use the
+ licensed material under specified terms and conditions. If
+ the licensor's permission is not necessary for any reason--for
+ example, because of any applicable exception or limitation to
+ copyright--then that use is not regulated by the license. Our
+ licenses grant only permissions under copyright and certain
+ other rights that a licensor has authority to grant. Use of
+ the licensed material may still be restricted for other
+ reasons, including because others have copyright or other
+ rights in the material. A licensor may make special requests,
+ such as asking that all changes be marked or described.
+ Although not required by our licenses, you are encouraged to
+ respect those requests where reasonable. More_considerations
+ for the public:
+ wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution 4.0 International Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution 4.0 International Public License ("Public License"). To the
+extent this Public License may be interpreted as a contract, You are
+granted the Licensed Rights in consideration of Your acceptance of
+these terms and conditions, and the Licensor grants You such rights in
+consideration of benefits the Licensor receives from making the
+Licensed Material available under these terms and conditions.
+
+
+Section 1 -- Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material
+ and in which the Licensed Material is translated, altered,
+ arranged, transformed, or otherwise modified in a manner requiring
+ permission under the Copyright and Similar Rights held by the
+ Licensor. For purposes of this Public License, where the Licensed
+ Material is a musical work, performance, or sound recording,
+ Adapted Material is always produced where the Licensed Material is
+ synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+
+ c. Copyright and Similar Rights means copyright and/or similar rights
+ closely related to copyright including, without limitation,
+ performance, broadcast, sound recording, and Sui Generis Database
+ Rights, without regard to how the rights are labeled or
+ categorized. For purposes of this Public License, the rights
+ specified in Section 2(b)(1)-(2) are not Copyright and Similar
+ Rights.
+
+ d. Effective Technological Measures means those measures that, in the
+ absence of proper authority, may not be circumvented under laws
+ fulfilling obligations under Article 11 of the WIPO Copyright
+ Treaty adopted on December 20, 1996, and/or similar international
+ agreements.
+
+ e. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+
+ f. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public
+ License.
+
+ g. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+
+ h. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+
+ i. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such
+ as reproduction, public display, public performance, distribution,
+ dissemination, communication, or importation, and to make material
+ available to the public including in ways that members of the
+ public may access the material from a place and at a time
+ individually chosen by them.
+
+ j. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and of
+ the Council of 11 March 1996 on the legal protection of databases,
+ as amended and/or succeeded, as well as other essentially
+ equivalent rights anywhere in the world.
+
+ k. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License,
+ the Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to
+ exercise the Licensed Rights in the Licensed Material to:
+
+ a. reproduce and Share the Licensed Material, in whole or
+ in part; and
+
+ b. produce, reproduce, and Share Adapted Material.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
+ Exceptions and Limitations apply to Your use, this Public
+ License does not apply, and You do not need to comply with
+ its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section
+ 6(a).
+
+ 4. Media and formats; technical modifications allowed. The
+ Licensor authorizes You to exercise the Licensed Rights in
+ all media and formats whether now known or hereafter created,
+ and to make technical modifications necessary to do so. The
+ Licensor waives and/or agrees not to assert any right or
+ authority to forbid You from making technical modifications
+ necessary to exercise the Licensed Rights, including
+ technical modifications necessary to circumvent Effective
+ Technological Measures. For purposes of this Public License,
+ simply making modifications authorized by this Section 2(a)
+ (4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ a. Offer from the Licensor -- Licensed Material. Every
+ recipient of the Licensed Material automatically
+ receives an offer from the Licensor to exercise the
+ Licensed Rights under the terms and conditions of this
+ Public License.
+
+ b. No downstream restrictions. You may not offer or impose
+ any additional or different terms or conditions on, or
+ apply any Effective Technological Measures to, the
+ Licensed Material if doing so restricts exercise of the
+ Licensed Rights by any recipient of the Licensed
+ Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or
+ may be construed as permission to assert or imply that You
+ are, or that Your use of the Licensed Material is, connected
+ with, or sponsored, endorsed, or granted official status by,
+ the Licensor or others designated to receive attribution as
+ provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not
+ licensed under this Public License, nor are publicity,
+ privacy, and/or other similar personality rights; however, to
+ the extent possible, the Licensor waives and/or agrees not to
+ assert any such rights held by the Licensor to the limited
+ extent necessary to allow You to exercise the Licensed
+ Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this
+ Public License.
+
+ 3. To the extent possible, the Licensor waives any right to
+ collect royalties from You for the exercise of the Licensed
+ Rights, whether directly or through a collecting society
+ under any voluntary or waivable statutory or compulsory
+ licensing scheme. In all other cases the Licensor expressly
+ reserves any right to collect such royalties.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified
+ form), You must:
+
+ a. retain the following if it is supplied by the Licensor
+ with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed
+ Material and any others designated to receive
+ attribution, in any reasonable manner requested by
+ the Licensor (including by pseudonym if
+ designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of
+ warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the
+ extent reasonably practicable;
+
+ b. indicate if You modified the Licensed Material and
+ retain an indication of any previous modifications; and
+
+ c. indicate the Licensed Material is licensed under this
+ Public License, and include the text of, or the URI or
+ hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in
+ which You Share the Licensed Material. For example, it may be
+ reasonable to satisfy the conditions by providing a URI or
+ hyperlink to a resource that includes the required
+ information.
+
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent
+ reasonably practicable.
+
+ 4. If You Share Adapted Material You produce, the Adapter's
+ License You apply must not prevent recipients of the Adapted
+ Material from complying with this Public License.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial
+ portion of the contents of the database;
+
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material; and
+
+ c. You must comply with the conditions in Section 3(a) if You Share
+ all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+ IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent
+ possible, most closely approximates an absolute disclaimer and
+ waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under
+ Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided
+ it is cured within 30 days of Your discovery of the
+ violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations
+ of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+ License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could lawfully
+ be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is
+ deemed unenforceable, it shall be automatically reformed to the
+ minimum extent necessary to make it enforceable. If the provision
+ cannot be reformed, it shall be severed from this Public License
+ without affecting the enforceability of the remaining terms and
+ conditions.
+
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+
+
+=======================================================================
+
+Creative Commons is not a party to its public
+licenses. Notwithstanding, Creative Commons may elect to apply one of
+its public licenses to material it publishes and in those instances
+will be considered the “Licensor.” The text of the Creative Commons
+public licenses is dedicated to the public domain under the CC0 Public
+Domain Dedication. Except for the limited purpose of indicating that
+material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the
+public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
\ No newline at end of file
diff --git a/icons/attribution.md b/icons/attribution.md
new file mode 100644
index 0000000..33513fc
--- /dev/null
+++ b/icons/attribution.md
@@ -0,0 +1,5 @@
+The icons in this directory have been made by "Microsoft and any contributors",
+see the [development repository](https://github.com/microsoft/vscode-icons/).
+
+They are distributed under Creative Commons Attribution 4.0 International
Public
+License, see the LICENSE file in this directory.
diff --git a/icons/vscode-dark/symbol-array.png
b/icons/vscode-dark/symbol-array.png
new file mode 100644
index 0000000..590b3f9
Binary files /dev/null and b/icons/vscode-dark/symbol-array.png differ
diff --git a/icons/vscode-dark/symbol-boolean.png
b/icons/vscode-dark/symbol-boolean.png
new file mode 100644
index 0000000..bb778f6
Binary files /dev/null and b/icons/vscode-dark/symbol-boolean.png differ
diff --git a/icons/vscode-dark/symbol-class.png
b/icons/vscode-dark/symbol-class.png
new file mode 100644
index 0000000..03bdec3
Binary files /dev/null and b/icons/vscode-dark/symbol-class.png differ
diff --git a/icons/vscode-dark/symbol-color.png
b/icons/vscode-dark/symbol-color.png
new file mode 100644
index 0000000..76f566e
Binary files /dev/null and b/icons/vscode-dark/symbol-color.png differ
diff --git a/icons/vscode-dark/symbol-constant.png
b/icons/vscode-dark/symbol-constant.png
new file mode 100644
index 0000000..e810490
Binary files /dev/null and b/icons/vscode-dark/symbol-constant.png differ
diff --git a/icons/vscode-dark/symbol-enumerator-member.png
b/icons/vscode-dark/symbol-enumerator-member.png
new file mode 100644
index 0000000..d2f81b3
Binary files /dev/null and b/icons/vscode-dark/symbol-enumerator-member.png
differ
diff --git a/icons/vscode-dark/symbol-enumerator.png
b/icons/vscode-dark/symbol-enumerator.png
new file mode 100644
index 0000000..01233e0
Binary files /dev/null and b/icons/vscode-dark/symbol-enumerator.png differ
diff --git a/icons/vscode-dark/symbol-event.png
b/icons/vscode-dark/symbol-event.png
new file mode 100644
index 0000000..384025e
Binary files /dev/null and b/icons/vscode-dark/symbol-event.png differ
diff --git a/icons/vscode-dark/symbol-field.png
b/icons/vscode-dark/symbol-field.png
new file mode 100644
index 0000000..3c6e408
Binary files /dev/null and b/icons/vscode-dark/symbol-field.png differ
diff --git a/icons/vscode-dark/symbol-interface.png
b/icons/vscode-dark/symbol-interface.png
new file mode 100644
index 0000000..1a0f0c3
Binary files /dev/null and b/icons/vscode-dark/symbol-interface.png differ
diff --git a/icons/vscode-dark/symbol-key.png b/icons/vscode-dark/symbol-key.png
new file mode 100644
index 0000000..0f35d80
Binary files /dev/null and b/icons/vscode-dark/symbol-key.png differ
diff --git a/icons/vscode-dark/symbol-keyword.png
b/icons/vscode-dark/symbol-keyword.png
new file mode 100644
index 0000000..30c76bd
Binary files /dev/null and b/icons/vscode-dark/symbol-keyword.png differ
diff --git a/icons/vscode-dark/symbol-method.png
b/icons/vscode-dark/symbol-method.png
new file mode 100644
index 0000000..24d9616
Binary files /dev/null and b/icons/vscode-dark/symbol-method.png differ
diff --git a/icons/vscode-dark/symbol-misc.png
b/icons/vscode-dark/symbol-misc.png
new file mode 100644
index 0000000..881b04c
Binary files /dev/null and b/icons/vscode-dark/symbol-misc.png differ
diff --git a/icons/vscode-dark/symbol-namespace.png
b/icons/vscode-dark/symbol-namespace.png
new file mode 100644
index 0000000..978b133
Binary files /dev/null and b/icons/vscode-dark/symbol-namespace.png differ
diff --git a/icons/vscode-dark/symbol-numeric.png
b/icons/vscode-dark/symbol-numeric.png
new file mode 100644
index 0000000..5803075
Binary files /dev/null and b/icons/vscode-dark/symbol-numeric.png differ
diff --git a/icons/vscode-dark/symbol-operator.png
b/icons/vscode-dark/symbol-operator.png
new file mode 100644
index 0000000..2dd24aa
Binary files /dev/null and b/icons/vscode-dark/symbol-operator.png differ
diff --git a/icons/vscode-dark/symbol-parameter.png
b/icons/vscode-dark/symbol-parameter.png
new file mode 100644
index 0000000..ca7d9db
Binary files /dev/null and b/icons/vscode-dark/symbol-parameter.png differ
diff --git a/icons/vscode-dark/symbol-property.png
b/icons/vscode-dark/symbol-property.png
new file mode 100644
index 0000000..1d40bab
Binary files /dev/null and b/icons/vscode-dark/symbol-property.png differ
diff --git a/icons/vscode-dark/symbol-ruler.png
b/icons/vscode-dark/symbol-ruler.png
new file mode 100644
index 0000000..edda64a
Binary files /dev/null and b/icons/vscode-dark/symbol-ruler.png differ
diff --git a/icons/vscode-dark/symbol-snippet.png
b/icons/vscode-dark/symbol-snippet.png
new file mode 100644
index 0000000..96f9577
Binary files /dev/null and b/icons/vscode-dark/symbol-snippet.png differ
diff --git a/icons/vscode-dark/symbol-string.png
b/icons/vscode-dark/symbol-string.png
new file mode 100644
index 0000000..022b9c9
Binary files /dev/null and b/icons/vscode-dark/symbol-string.png differ
diff --git a/icons/vscode-dark/symbol-structure.png
b/icons/vscode-dark/symbol-structure.png
new file mode 100644
index 0000000..e2943bf
Binary files /dev/null and b/icons/vscode-dark/symbol-structure.png differ
diff --git a/icons/vscode-dark/symbol-variable.png
b/icons/vscode-dark/symbol-variable.png
new file mode 100644
index 0000000..bcf54d8
Binary files /dev/null and b/icons/vscode-dark/symbol-variable.png differ
diff --git a/icons/vscode-light/symbol-array.png
b/icons/vscode-light/symbol-array.png
new file mode 100644
index 0000000..9aa5352
Binary files /dev/null and b/icons/vscode-light/symbol-array.png differ
diff --git a/icons/vscode-light/symbol-boolean.png
b/icons/vscode-light/symbol-boolean.png
new file mode 100644
index 0000000..bd5a118
Binary files /dev/null and b/icons/vscode-light/symbol-boolean.png differ
diff --git a/icons/vscode-light/symbol-class.png
b/icons/vscode-light/symbol-class.png
new file mode 100644
index 0000000..b7eb6ea
Binary files /dev/null and b/icons/vscode-light/symbol-class.png differ
diff --git a/icons/vscode-light/symbol-color.png
b/icons/vscode-light/symbol-color.png
new file mode 100644
index 0000000..811a8b4
Binary files /dev/null and b/icons/vscode-light/symbol-color.png differ
diff --git a/icons/vscode-light/symbol-constant.png
b/icons/vscode-light/symbol-constant.png
new file mode 100644
index 0000000..b7213a4
Binary files /dev/null and b/icons/vscode-light/symbol-constant.png differ
diff --git a/icons/vscode-light/symbol-enumerator-member.png
b/icons/vscode-light/symbol-enumerator-member.png
new file mode 100644
index 0000000..a34a42f
Binary files /dev/null and b/icons/vscode-light/symbol-enumerator-member.png
differ
diff --git a/icons/vscode-light/symbol-enumerator.png
b/icons/vscode-light/symbol-enumerator.png
new file mode 100644
index 0000000..1e14c7c
Binary files /dev/null and b/icons/vscode-light/symbol-enumerator.png differ
diff --git a/icons/vscode-light/symbol-event.png
b/icons/vscode-light/symbol-event.png
new file mode 100644
index 0000000..c00ccd7
Binary files /dev/null and b/icons/vscode-light/symbol-event.png differ
diff --git a/icons/vscode-light/symbol-field.png
b/icons/vscode-light/symbol-field.png
new file mode 100644
index 0000000..8fb10ff
Binary files /dev/null and b/icons/vscode-light/symbol-field.png differ
diff --git a/icons/vscode-light/symbol-interface.png
b/icons/vscode-light/symbol-interface.png
new file mode 100644
index 0000000..af14cc9
Binary files /dev/null and b/icons/vscode-light/symbol-interface.png differ
diff --git a/icons/vscode-light/symbol-key.png
b/icons/vscode-light/symbol-key.png
new file mode 100644
index 0000000..f182179
Binary files /dev/null and b/icons/vscode-light/symbol-key.png differ
diff --git a/icons/vscode-light/symbol-keyword.png
b/icons/vscode-light/symbol-keyword.png
new file mode 100644
index 0000000..519b201
Binary files /dev/null and b/icons/vscode-light/symbol-keyword.png differ
diff --git a/icons/vscode-light/symbol-method.png
b/icons/vscode-light/symbol-method.png
new file mode 100644
index 0000000..5ec1d3f
Binary files /dev/null and b/icons/vscode-light/symbol-method.png differ
diff --git a/icons/vscode-light/symbol-misc.png
b/icons/vscode-light/symbol-misc.png
new file mode 100644
index 0000000..a5f3c6b
Binary files /dev/null and b/icons/vscode-light/symbol-misc.png differ
diff --git a/icons/vscode-light/symbol-namespace.png
b/icons/vscode-light/symbol-namespace.png
new file mode 100644
index 0000000..bd76f7d
Binary files /dev/null and b/icons/vscode-light/symbol-namespace.png differ
diff --git a/icons/vscode-light/symbol-numeric.png
b/icons/vscode-light/symbol-numeric.png
new file mode 100644
index 0000000..bd647e8
Binary files /dev/null and b/icons/vscode-light/symbol-numeric.png differ
diff --git a/icons/vscode-light/symbol-operator.png
b/icons/vscode-light/symbol-operator.png
new file mode 100644
index 0000000..9f0552a
Binary files /dev/null and b/icons/vscode-light/symbol-operator.png differ
diff --git a/icons/vscode-light/symbol-parameter.png
b/icons/vscode-light/symbol-parameter.png
new file mode 100644
index 0000000..5411e6a
Binary files /dev/null and b/icons/vscode-light/symbol-parameter.png differ
diff --git a/icons/vscode-light/symbol-property.png
b/icons/vscode-light/symbol-property.png
new file mode 100644
index 0000000..bf7d67d
Binary files /dev/null and b/icons/vscode-light/symbol-property.png differ
diff --git a/icons/vscode-light/symbol-ruler.png
b/icons/vscode-light/symbol-ruler.png
new file mode 100644
index 0000000..4488302
Binary files /dev/null and b/icons/vscode-light/symbol-ruler.png differ
diff --git a/icons/vscode-light/symbol-snippet.png
b/icons/vscode-light/symbol-snippet.png
new file mode 100644
index 0000000..48f36a5
Binary files /dev/null and b/icons/vscode-light/symbol-snippet.png differ
diff --git a/icons/vscode-light/symbol-string.png
b/icons/vscode-light/symbol-string.png
new file mode 100644
index 0000000..c630f3f
Binary files /dev/null and b/icons/vscode-light/symbol-string.png differ
diff --git a/icons/vscode-light/symbol-structure.png
b/icons/vscode-light/symbol-structure.png
new file mode 100644
index 0000000..6ff5a75
Binary files /dev/null and b/icons/vscode-light/symbol-structure.png differ
diff --git a/icons/vscode-light/symbol-variable.png
b/icons/vscode-light/symbol-variable.png
new file mode 100644
index 0000000..5cf5d7d
Binary files /dev/null and b/icons/vscode-light/symbol-variable.png differ
diff --git a/test/frontends-tests.el b/test/frontends-tests.el
index 199467a..a1301ac 100644
--- a/test/frontends-tests.el
+++ b/test/frontends-tests.el
@@ -255,6 +255,44 @@
" MIRAI発売2カ月 ")
(company--create-lines 0 999)))))
+(ert-deftest company-create-lines-with-format-function ()
+ (let* (company-show-numbers
+ (company-candidates '("ArrayList"))
+ (company-candidates-length 1)
+ (company-package-root default-directory)
+ (company-format-margin-function (lambda (candidate selected)
+ "XXX"))
+ (company-backend (lambda (c &rest _) (pcase c (`kind 'class)))))
+ (should (ert-equal-including-properties
+ (car (company--create-lines 0 999))
+ #("XXXArrayList " 0 16
+ (face (company-tooltip-selection company-tooltip)
+ mouse-face (company-tooltip-mouse)))))))
+
+(ert-deftest company-create-lines-with-icons-format-function ()
+ :tags '(gui)
+ (let* (company-show-numbers
+ (company-icon-size 15)
+ (company-candidates '("ArrayList"))
+ (company-candidates-length 1)
+ (default-directory company-package-root)
+ (company-tooltip-maximum-width 20)
+ (company-tooltip-minimum-width 20)
+ (company-format-margin-function
+ 'company-vscode-light-icons-margin-function)
+ (company-backend (lambda (c &rest _) (pcase c (`kind 'class)))))
+ (let ((tooltip-line (car (company--create-lines 0 999))))
+ (should (equal tooltip-line " ArrayList "))
+ (should (equal
+ (car (get-text-property 1 'display tooltip-line))
+ 'space))
+ (should (equal
+ (get-text-property 0 'display tooltip-line)
+ `(image :file ,(expand-file-name
"vscode-light/symbol-class.png")
+ :type png :width 15 :height 15 :ascent center
+ :background ,(face-attribute 'company-tooltip-selection
+ :background)))))))
+
(ert-deftest company-fill-propertize-truncates-search-highlight ()
(let ((company-search-string "foo")
(company-backend #'ignore)
- [elpa] externals/company updated (613541e -> 7207cb1), ELPA Syncer, 2021/03/26
- [elpa] externals/company d714352 1/6: Initial support for icons in company-mode core, ELPA Syncer, 2021/03/26
- [elpa] externals/company ced9088 2/6: Add GUI-only test, ELPA Syncer, 2021/03/26
- [elpa] externals/company 14bfcc0 3/6: Minor touches, ELPA Syncer, 2021/03/26
- [elpa] externals/company 8f73311 4/6: Add attribution.md, ELPA Syncer, 2021/03/26
- [elpa] externals/company 7207cb1 6/6: NEWS edits, ELPA Syncer, 2021/03/26
- [elpa] externals/company 40f5045 5/6: Merge branch 'yyoncho-icons2',
ELPA Syncer <=