nit.git
4 years agofrontend: Introduce `test_frontend` to easily test model related code
Alexandre Terrasa [Sun, 14 Jul 2019 18:01:30 +0000 (14:01 -0400)]
frontend: Introduce `test_frontend` to easily test model related code

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agodoc: Rename `synopsys` into `synopsis`
Alexandre Terrasa [Sun, 14 Jul 2019 16:55:45 +0000 (12:55 -0400)]
doc: Rename `synopsys` into `synopsis`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agometrics: ReadmeMetrics uses markdown2
Alexandre Terrasa [Sun, 14 Jul 2019 15:37:52 +0000 (11:37 -0400)]
metrics: ReadmeMetrics uses markdown2

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoMerge: ci: basic bench with old branch
Jean Privat [Fri, 12 Jul 2019 19:53:19 +0000 (15:53 -0400)]
Merge: ci: basic bench with old branch

This adds a job where a basic execution is compared against origin/master is order to catch important time or space regressions. Because the test machine is shared with many jobs, the results are not that reliable and some additional checks by the integrator might be required.

However, the script can help developers to do a basic check to document their PR.

Pull-Request: #2739
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>

4 years agoMerge: typing: get_method refactoring
Jean Privat [Fri, 12 Jul 2019 19:53:15 +0000 (15:53 -0400)]
Merge: typing: get_method refactoring

Split the get_method to three different entry points. These new entry points make it possible to adapt the treatment to the actual context. This avoids creating callsites manually and in the same time do the verification if the researched method exist (display an error if not exist)

Signed-off-by: Florian Deljarry <deljarry.florian@gmail.com>

Pull-Request: #2760
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
Reviewed-by: Jean Privat <jean@pryen.org>

4 years agoMerge: nitc: fix --keep-going in the compiler broken by 539ca148d
Jean Privat [Fri, 12 Jul 2019 19:53:10 +0000 (15:53 -0400)]
Merge: nitc: fix --keep-going in the compiler broken by 539ca148d

Also add tests to avoid that again

Pull-Request: #2763

4 years agoci: compile the manual
Jean Privat [Wed, 10 Jul 2019 14:59:09 +0000 (10:59 -0400)]
ci: compile the manual

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agoci: do not error when nothing with nitunit_some
Jean Privat [Fri, 12 Jul 2019 18:00:41 +0000 (14:00 -0400)]
ci: do not error when nothing with nitunit_some

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agoci: tests that requirements for tools are still OK
Jean Privat [Fri, 12 Jul 2019 19:11:57 +0000 (15:11 -0400)]
ci: tests that requirements for tools are still OK

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agoREADME: update the state of requirements
Jean Privat [Fri, 12 Jul 2019 19:09:34 +0000 (15:09 -0400)]
README: update the state of requirements

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agotools: move nitpm to more_tools since it requires libcurl
Jean Privat [Fri, 12 Jul 2019 18:23:12 +0000 (14:23 -0400)]
tools: move nitpm to more_tools since it requires libcurl

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agodoc/manual: put back the manual in the main repository
Jean Privat [Wed, 10 Jul 2019 14:58:57 +0000 (10:58 -0400)]
doc/manual: put back the manual in the main repository

Currently it bit rot in the wiki :(

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agonitc: fix --keep-going in the compiler broken by 539ca148d
Jean Privat [Wed, 10 Jul 2019 20:13:11 +0000 (16:13 -0400)]
nitc: fix --keep-going in the compiler broken by 539ca148d

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agotyping: get_method refactoring
Florian Deljarry [Tue, 9 Jul 2019 20:21:41 +0000 (16:21 -0400)]
typing: get_method refactoring

Split the get_method to three different entry points. These new entry points make it possible to adapt the treatment to the actual context.

Signed-off-by: Florian Deljarry <deljarry.florian@gmail.com>

4 years agotests: add base_safe.nit for safe calls
Jean Privat [Wed, 10 Jul 2019 14:06:22 +0000 (10:06 -0400)]
tests: add base_safe.nit for safe calls

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agotyping and engines: handle safe calls `x?.foo`
Jean Privat [Wed, 10 Jul 2019 13:59:27 +0000 (09:59 -0400)]
typing and engines: handle safe calls `x?.foo`

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agogithub: Remove old logging
Alexandre Terrasa [Thu, 11 Jul 2019 02:35:40 +0000 (22:35 -0400)]
github: Remove old logging

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Clean `get_contributor_stats`
Alexandre Terrasa [Thu, 11 Jul 2019 02:35:19 +0000 (22:35 -0400)]
github: Clean `get_contributor_stats`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Kill `github_curl`
Alexandre Terrasa [Tue, 9 Jul 2019 03:15:31 +0000 (23:15 -0400)]
github: Kill `github_curl`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub_search_for_jni: Migrate to new Github API
Alexandre Terrasa [Tue, 9 Jul 2019 03:14:48 +0000 (23:14 -0400)]
github_search_for_jni: Migrate to new Github API

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub_merge: Migrate to new Github API
Alexandre Terrasa [Tue, 9 Jul 2019 03:14:27 +0000 (23:14 -0400)]
github_merge: Migrate to new Github API

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoci: clean ccache stats to see the real effect of ccaching
Jean Privat [Thu, 11 Jul 2019 12:31:53 +0000 (08:31 -0400)]
ci: clean ccache stats to see the real effect of ccaching

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agogithub: Introduce `get_pull_comments`
Alexandre Terrasa [Thu, 11 Jul 2019 01:05:13 +0000 (21:05 -0400)]
github: Introduce `get_pull_comments`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Rename `ReviewComment` in `PullComment`
Alexandre Terrasa [Thu, 11 Jul 2019 00:59:12 +0000 (20:59 -0400)]
github: Rename `ReviewComment` in `PullComment`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Rename `get_review_comment` in `get_pull_comment`
Alexandre Terrasa [Thu, 11 Jul 2019 00:57:08 +0000 (20:57 -0400)]
github: Rename `get_review_comment` in `get_pull_comment`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Introduce `get_commit_status`
Alexandre Terrasa [Thu, 11 Jul 2019 00:42:13 +0000 (20:42 -0400)]
github: Introduce `get_commit_status`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Repo::default_branch can actually be null...
Alexandre Terrasa [Thu, 11 Jul 2019 01:08:55 +0000 (21:08 -0400)]
github: Repo::default_branch can actually be null...

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: GithubWallet uses logger
Alexandre Terrasa [Tue, 9 Jul 2019 00:57:24 +0000 (20:57 -0400)]
github: GithubWallet uses logger

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: GithubWallet uses optional attributes
Alexandre Terrasa [Tue, 9 Jul 2019 00:44:53 +0000 (20:44 -0400)]
github: GithubWallet uses optional attributes

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Add mock testing for GithubWallet
Alexandre Terrasa [Tue, 9 Jul 2019 00:44:28 +0000 (20:44 -0400)]
github: Add mock testing for GithubWallet

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Clean GithubAPI deserialization
Alexandre Terrasa [Thu, 11 Jul 2019 01:24:37 +0000 (21:24 -0400)]
github: Clean GithubAPI deserialization

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogihtub: Remove ISODate
Alexandre Terrasa [Fri, 21 Jun 2019 03:12:30 +0000 (23:12 -0400)]
gihtub: Remove ISODate

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Remove GithubEntity
Alexandre Terrasa [Fri, 21 Jun 2019 03:08:12 +0000 (23:08 -0400)]
github: Remove GithubEntity

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Decouple API from responses instances
Alexandre Terrasa [Fri, 21 Jun 2019 02:56:22 +0000 (22:56 -0400)]
github: Decouple API from responses instances

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Remove method `GithubAPI::get_branch_commits`
Alexandre Terrasa [Fri, 21 Jun 2019 02:27:06 +0000 (22:27 -0400)]
github: Remove method `GithubAPI::get_branch_commits`

Let clients handle that.

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: `search_issues` returns a SearchResults
Alexandre Terrasa [Thu, 11 Jul 2019 01:21:34 +0000 (21:21 -0400)]
github: `search_issues` returns a SearchResults

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Remove `get_repo_last_issue`
Alexandre Terrasa [Thu, 11 Jul 2019 01:20:16 +0000 (21:20 -0400)]
github: Remove `get_repo_last_issue`

This was a terrible hack...

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Refactorize array requests
Alexandre Terrasa [Fri, 21 Jun 2019 02:25:16 +0000 (22:25 -0400)]
github: Refactorize array requests

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Rename `GithubAPI::load_` methods in `get_`
Alexandre Terrasa [Fri, 21 Jun 2019 00:33:20 +0000 (20:33 -0400)]
github: Rename `GithubAPI::load_` methods in `get_`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Move deserialization process to `get`
Alexandre Terrasa [Fri, 21 Jun 2019 00:44:38 +0000 (20:44 -0400)]
github: Move deserialization process to `get`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Decouple GithubAPI from `GithubCurl`
Alexandre Terrasa [Fri, 21 Jun 2019 01:22:17 +0000 (21:22 -0400)]
github: Decouple GithubAPI from `GithubCurl`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agocontrib: Kill `wiringPi`
Alexandre Terrasa [Thu, 11 Jul 2019 00:06:26 +0000 (20:06 -0400)]
contrib: Kill `wiringPi`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agocontrib: Kill `refund`
Alexandre Terrasa [Thu, 11 Jul 2019 00:05:50 +0000 (20:05 -0400)]
contrib: Kill `refund`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agocontrib: Kill `neo_doxygen`
Alexandre Terrasa [Thu, 11 Jul 2019 00:05:08 +0000 (20:05 -0400)]
contrib: Kill `neo_doxygen`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoci: basic bench with old branch
Jean Privat [Sat, 23 Feb 2019 03:13:05 +0000 (22:13 -0500)]
ci: basic bench with old branch

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agointerpreter: add `Instance::is_null` to simplify code
Jean Privat [Wed, 10 Jul 2019 13:56:38 +0000 (09:56 -0400)]
interpreter: add `Instance::is_null` to simplify code

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agoparser: regenerate with safe call `x?.foo`
Jean Privat [Wed, 10 Jul 2019 13:56:01 +0000 (09:56 -0400)]
parser: regenerate with safe call `x?.foo`

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agosyntax: add safe call syntax `x?.foo`
Jean Privat [Wed, 10 Jul 2019 13:54:14 +0000 (09:54 -0400)]
syntax: add safe call syntax `x?.foo`

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agogithub: API use new constructors
Alexandre Terrasa [Wed, 19 Jun 2019 03:22:32 +0000 (23:22 -0400)]
github: API use new constructors

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoMerge: nitrpg: Move `nitrpg` to its own repository
Jean Privat [Wed, 3 Jul 2019 18:50:57 +0000 (14:50 -0400)]
Merge: nitrpg: Move `nitrpg` to its own repository

`nitrpg` is broken since a long time. I think https:/api.github.com actually changed twice since it broke. I don't plan on killing it yet but I moved it to its own repository until I worked again on it (or never).

See https://github.com/Morriar/nitrpg.

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

Pull-Request: #2755

4 years agoMerge: Mock Github API tests
Jean Privat [Wed, 3 Jul 2019 18:50:53 +0000 (14:50 -0400)]
Merge: Mock Github API tests

This PR adds a mock to GithubAPI so we can avoid sending requests to the API on CI.

For each API call we save the actual Github response body from the API and reuse it during the tests.
The attribute `update_responses_cache` can be set to `true` so the cache files are updated from the API when `nitunit` is called.

Pull-Request: #2753
Reviewed-by: Jean Privat <jean@pryen.org>

4 years agoMerge: Follow the INI specification
Jean Privat [Wed, 3 Jul 2019 18:50:48 +0000 (14:50 -0400)]
Merge: Follow the INI specification

This version follows more closely the INI specification (https://en.wikipedia.org/wiki/INI_file) and adds some improvements to the API.

Spec changes:
* Allow `#` and `;` for comments
* No more sections nesting as by the spec (which actually change nothing see below)

API changes:
* Renaming `ConfigTree` -> `IniFile` (as it's no more a "tree")
* No more coupling with a file path, use utility methods `load_string`, `load_file`, `write_to`  instead
* Ability to iterate keys, values, sections and section content
* Ability to create `IniSection` by hand
* `IniFile` and `IniSection` implements `Map[String, nullable String]`

The biggest change is that sub-sections are now flattened.

Before, with the following ini:

~~~ini
[section1]
key1=value1
[section1.section2]
key2=value2
~~~

You would get this hierarchy:

~~~
section1
  |   key1=value1
  `- section2
      `-  key2=value2
~~~

Now you get:

~~~
section1
  `- key1=value1
section1.section2
  `-  key2=value2
~~~

Two independent (unnested) sections, one called `section1` and the other called `section1.section2`.
This actually change nothing if the client was using the `[]` operator with the `.` notation as:

~~~
ini["section1.section2.key2"] # still returns `value2`
~~~

Documentation and specification from the README:

# `ini` - Read and write INI configuration files

[INI files](https://en.wikipedia.org/wiki/INI_file) are simple text files with
a basic structure composed of sections, properties and values used to store
configuration parameters.

Here's an example from the `package.ini` of this package:

~~~nit
import ini

var package_ini = """
[package]
name=ini
desc=Read and write INI configuration files.
[upstream]
git=https://github.com/nitlang/nit.git
git.directory=lib/ini/
"""
~~~

## Basic usage

`IniFile` is used to parse INI strings and access their content:

~~~nit
var ini = new IniFile.from_string(package_ini)
assert ini["package.name"] == "ini"
assert ini["upstream.git.directory"] == "lib/ini/"
assert ini["unknown.unknown"] == null
~~~

`IniFile` can also load INI configuration from a file:

~~~nit
package_ini.write_to_file("my_package.ini")

ini = new IniFile.from_file("my_package.ini")
assert ini["package.name"] == "ini"
assert ini["upstream.git.directory"] == "lib/ini/"

"my_package.ini".to_path.delete
~~~

INI content can be added or edited through the `IniFile` API then written to
a stream or a file.

~~~nit
ini["package.name"] = "new name"
ini["upstream.git.directory"] = "/dev/null"
ini["section.key"] = "value"

var stream = new StringWriter
ini.write_to(stream)

assert stream.to_s == """
[package]
name=new name
desc=Read and write INI configuration files.
[upstream]
git=https://github.com/nitlang/nit.git
git.directory=/dev/null
[section]
key=value
"""
~~~

## INI content

### Properties

Properties are the basic element of the INI format.
Every property correspond to a *key* associated to a *value* thanks to the equal (`=`) sign.

~~~nit
ini = new IniFile.from_string("""
key1=value1
key2=value2
""")
assert ini["key1"] == "value1"
assert ini["key2"] == "value2"
assert ini.length == 2
~~~

Accessing an unknown property returns `null`:

~~~nit
assert ini["unknown"] == null
~~~

Properties can be iterated over:

~~~nit
var i = 1
for key, value in ini do
assert key == "key{i}"
assert value == "value{i}"
i += 1
end
~~~

Property keys cannot contain the character `=`.
Values can contain any character.
Spaces are trimmed.

~~~nit
ini = new IniFile.from_string("""
prop=erty1=value1
 property2 =  value2
property3=value3 ; with semicolon
""")
assert ini[";property1"] == null
assert ini["prop=erty1"] == null
assert ini["prop"] == "erty1=value1"
assert ini["property2"] == "value2"
assert ini[" property2 "] == "value2"
assert ini["property3"] == "value3 ; with semicolon"
~~~

Both keys and values are case sensitive.

~~~nit
ini = new IniFile.from_string("""
Property1=value1
property2=Value2
""")
assert ini["property1"] == null
assert ini["Property1"] == "value1"
assert ini["property2"] != "value2"
assert ini["property2"] == "Value2"
~~~

### Sections

Properties may be grouped into arbitrary sections.
The section name appears on a line by itself between square brackets (`[` and `]`).

All keys after the section declaration are associated with that section.
The is no explicit "end of section" delimiter; sections end at the next section
declaration or the end of the file.
Sections cannot be nested.

~~~nit
var content = """
key1=value1
key2=value2
[section1]
key1=value3
key2=value4
[section2]
key1=value5
"""

ini = new IniFile.from_string(content)
assert ini["key1"] == "value1"
assert ini["unknown"] == null
assert ini["section1.key1"] == "value3"
assert ini["section1.unknown"] == null
assert ini["section2.key1"] == "value5"
~~~

Sections can be iterated over:

~~~nit
i = 1
for section in ini.sections do
assert section.name == "section{i}"
assert section["key1"].has_prefix("value")
i += 1
end
~~~

When iterating over a file properties, only properties at root are returned.
`flatten` can be used to iterate over all properties including the one from
sections.

~~~nit
assert ini.join(", ", ": ") == "key1: value1, key2: value2"
assert ini.flatten.join(", ", ": ") ==
"key1: value1, key2: value2, section1.key1: value3, section1.key2: value4, section2.key1: value5"

i = 0
for key, value in ini do
i += 1
assert key == "key{i}" and value == "value{i}"
end
assert i == 2

~~~

Sections name may contain any character including brackets (`[` and `]`).
Spaces are trimmed.

~~~nit
ini = new IniFile.from_string("""
[[section1]]
key=value1
[ section 2 ]
key=value2
[section1.section3]
key=value3
""")
assert ini.sections.length == 3
assert ini["[section1].key"] == "value1"
assert ini["section 2.key"] == "value2"
assert ini["section1.section3.key"] == "value3"
assert ini.sections.last.name == "section1.section3"
~~~

The dot `.` notation is used to create new sections with `[]=`.
Unknown sections will be created on the fly.

~~~nit
ini = new IniFile
ini["key"] = "value1"
ini["section1.key"] = "value2"
ini["section2.key"] = "value3"

stream = new StringWriter
ini.write_to(stream)
assert stream.to_s == """
key=value1
[section1]
key=value2
[section2]
key=value3
"""
~~~

Sections can also be created manually:

~~~nit
ini = new IniFile
ini["key"] = "value1"

var section = new IniSection("section1")
section["key"] = "value2"
ini.sections.add section

stream = new StringWriter
ini.write_to(stream)
assert stream.to_s == """
key=value1
[section1]
key=value2
"""
~~~

### Comments

Comments are indicated by semicolon (`;`) or a number sign (`#`) at the begining
of the line. Commented lines are ignored as well as empty lines.

~~~nit
ini = new IniFile.from_string("""
; This is a comment.
; property1=value1

# This is another comment.
# property2=value2
""")
assert ini.is_empty
~~~

### Unicode support

INI files support Unicode:

~~~nit
ini = new IniFile.from_string("""
property❤=héhé
""")
assert ini["property❤"] == "héhé"
~~~

Pull-Request: #2752
Reviewed-by: Jean Privat <jean@pryen.org>

4 years agoMerge: Introduce `Logger`, a simple yet powerful logging system
Jean Privat [Wed, 3 Jul 2019 18:50:43 +0000 (14:50 -0400)]
Merge: Introduce `Logger`, a simple yet powerful logging system

# A simple logger for Nit

## Basic Usage

Create a new `Logger` with a severity level threshold set to `warn_level`:

~~~nit
var logger = new Logger(warn_level)
~~~

Messages with a severity equal or higher than `warn_level` will be displayed:

~~~nit
logger.error "Displays an error."
logger.warn "Displays a warning."
~~~

Messages with a lower severity are silenced:

~~~nit
logger.info "Displays nothing."
~~~

`FileLogger` can be used to output the messages into a file:

~~~nit
var log_file = "my.log"

logger = new FileLogger(warn_level, log_file, append = false)
logger.error("An error")
logger.info("Some info")
logger.close

assert log_file.to_path.read_all == "An error\n"
log_file.to_path.delete
~~~

## Severity levels

Each message is associated with a level that indicate its severity.
Only messages with a severity equal to or higher than the logger `level`
threshold will be displayed.

Severity levels from the most severe to the least severe:

* `unknown_level`: An unknown message that should always be outputted.
* `fatal_level`: An unhandleable error that results in a program crash.
* `error_level`: A handleable error condition.
* `warn_level`: A warning.
* `info_level`: Generic (useful) information about system operation.
* `debug_level`: Low-level information for developpers.

## Formatting messages

You can create custom formatters by implementing the `Formatter` interface.

~~~nit
class MyFormatter
super Formatter

redef fun format(level, message) do
if level < warn_level then return message
return "!!!{message}!!!"
end
end
~~~

See `DefaultFormatter` for a more advanced implementation example.

Each Logger can be given a default formatter used to format the every messages
before outputting them:

~~~nit
var formatter = new MyFormatter
var stderr = new StringWriter
var logger = new Logger(warn_level, stderr, formatter)

logger.warn("This is a warning.")
assert stderr.to_s.trim.split("\n").last == "!!!This is a warning.!!!"
~~~

Optionally, a `Formatter` can be given to replace the `default_formatter`
used by default:

~~~nit
# Create a formatter with no default decorator
logger = new Logger(warn_level, stderr, null)

# Display a message without any formatter
logger.warn("This is a warning.")
assert stderr.to_s.trim.split("\n").last == "This is a warning."

# Display a message with a custom formatter
logger.warn("This is a warning.", formatter)
assert stderr.to_s.trim.split("\n").last == "!!!This is a warning.!!!"
~~~

Pull-Request: #2751
Reviewed-by: Jean Privat <jean@pryen.org>

4 years agogithub: Switch GithubAPI examples to `nitish`
Alexandre Terrasa [Wed, 19 Jun 2019 02:46:24 +0000 (22:46 -0400)]
github: Switch GithubAPI examples to `nitish`

Since it's now covered by the mock.

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Fix `GithubAPI::load_repo_branches`
Alexandre Terrasa [Wed, 19 Jun 2019 02:39:58 +0000 (22:39 -0400)]
github: Fix `GithubAPI::load_repo_branches`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Add mock api testing
Alexandre Terrasa [Wed, 19 Jun 2019 03:50:32 +0000 (23:50 -0400)]
github: Add mock api testing

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agonitrpg: Move `nitrpg` to its own repository
Alexandre Terrasa [Thu, 20 Jun 2019 23:31:41 +0000 (19:31 -0400)]
nitrpg: Move `nitrpg` to its own repository

See https://github.com/Morriar/nitrpg.

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agonitpm: Update to new INI api
Alexandre Terrasa [Sat, 15 Jun 2019 18:58:09 +0000 (14:58 -0400)]
nitpm: Update to new INI api

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agonitpackage: Update to new INI api
Alexandre Terrasa [Sat, 15 Jun 2019 18:57:51 +0000 (14:57 -0400)]
nitpackage: Update to new INI api

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoloader: Update to new INI api
Alexandre Terrasa [Sat, 15 Jun 2019 18:56:19 +0000 (14:56 -0400)]
loader: Update to new INI api

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agodoc: Update to new INI api
Alexandre Terrasa [Sat, 15 Jun 2019 18:56:09 +0000 (14:56 -0400)]
doc: Update to new INI api

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agonitiwiki: Update to new INI api
Alexandre Terrasa [Sat, 15 Jun 2019 18:55:56 +0000 (14:55 -0400)]
nitiwiki: Update to new INI api

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agodocker-ci: ajoute libicu-dev
Jean Privat [Thu, 20 Jun 2019 15:19:53 +0000 (11:19 -0400)]
docker-ci: ajoute libicu-dev

4 years agoconfig: Update to new INI api
Alexandre Terrasa [Sat, 15 Jun 2019 18:55:35 +0000 (14:55 -0400)]
config: Update to new INI api

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoini: Update `package.ini` file
Alexandre Terrasa [Sat, 15 Jun 2019 18:55:19 +0000 (14:55 -0400)]
ini: Update `package.ini` file

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoini: Add a README with tests from the spec
Alexandre Terrasa [Sat, 15 Jun 2019 18:54:54 +0000 (14:54 -0400)]
ini: Add a README with tests from the spec

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoini: Rewrite lib so it follows the INI spec
Alexandre Terrasa [Tue, 18 Jun 2019 23:13:01 +0000 (19:13 -0400)]
ini: Rewrite lib so it follows the INI spec

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agonitweb: Adapt server to new `pop_logging` interface
Alexandre Terrasa [Sat, 15 Jun 2019 01:39:40 +0000 (21:39 -0400)]
nitweb: Adapt server to new `pop_logging` interface

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agogithub: Adapt Github loader to new `pop_logging` interface
Alexandre Terrasa [Sat, 15 Jun 2019 01:39:18 +0000 (21:39 -0400)]
github: Adapt Github loader to new `pop_logging` interface

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agopopcorn: Remove useless dependency between `pop_tracker` and `pop_logging`
Alexandre Terrasa [Sat, 15 Jun 2019 01:38:46 +0000 (21:38 -0400)]
popcorn: Remove useless dependency between `pop_tracker` and `pop_logging`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agopopcorn: Use `logger`
Alexandre Terrasa [Sat, 15 Jun 2019 01:37:55 +0000 (21:37 -0400)]
popcorn: Use `logger`

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoIntroduce `logger`, a simple logging utility for Nit
Alexandre Terrasa [Sat, 15 Jun 2019 01:01:26 +0000 (21:01 -0400)]
Introduce `logger`, a simple logging utility for Nit

Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

4 years agoMerge: Some more small improvements on gitlab-ci
Jean Privat [Thu, 13 Jun 2019 14:14:24 +0000 (10:14 -0400)]
Merge: Some more small improvements on gitlab-ci

Pull-Request: #2744

4 years agoMerge: concurrent_collections: Add implementation of has method
Jean Privat [Fri, 7 Jun 2019 17:16:31 +0000 (13:16 -0400)]
Merge: concurrent_collections: Add implementation of has method

Adding the implementation of the has method to call the has on the `real_collection`

Pull-Request: #2748

4 years agoMerge: lib/core/bytes: Add a redef of has method
Jean Privat [Fri, 7 Jun 2019 17:16:29 +0000 (13:16 -0400)]
Merge: lib/core/bytes: Add a redef of has method

Adding the redef of the `has` method  to take care of the negative numbers

Signed-off-by: Florian Deljarry <deljarry.florian@gmail.com>

Pull-Request: #2749
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Jean Privat <jean@pryen.org>

4 years agoMerge: Fix LineIterator
Jean Privat [Fri, 7 Jun 2019 17:16:26 +0000 (13:16 -0400)]
Merge: Fix LineIterator

The logic behind LineIteraor (and the contracts of the iterators methods) was broken because of a bad management of the cache.

Instead of solving it locally, this PR introduces a simple CacheIterator abstract class with the correct behavior and simplify LineIteraor by using it.

Pull-Request: #2750

4 years agotests: add test_file_read3 for LineIterator
Jean Privat [Thu, 30 May 2019 15:00:58 +0000 (11:00 -0400)]
tests: add test_file_read3 for LineIterator

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agolib/core/stream: LineIterator use CachedIterator
Jean Privat [Thu, 30 May 2019 14:51:55 +0000 (10:51 -0400)]
lib/core/stream: LineIterator use CachedIterator

The logic behind `is_ok` was broken and caused inconsitent results.

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agolib/core/collection: add `CachedIterator` to factorize the logic of iterators with...
Jean Privat [Thu, 30 May 2019 14:45:06 +0000 (10:45 -0400)]
lib/core/collection: add `CachedIterator` to factorize the logic of iterators with a cache

Signed-off-by: Jean Privat <jean@pryen.org>

4 years agolib/core/bytes: Adding a redef of has method
Florian Deljarry [Tue, 28 May 2019 16:03:12 +0000 (12:03 -0400)]
lib/core/bytes: Adding a redef of has method

Adding the redef of the `has` method  to take care of the negative numbers

Signed-off-by: Florian Deljarry <deljarry.florian@gmail.com>

4 years agoconcurrent_collections: Adding implementation of has method
Florian Deljarry [Mon, 27 May 2019 16:03:01 +0000 (12:03 -0400)]
concurrent_collections: Adding implementation of has method

Signed-off-by: Florian Deljarry <deljarry.florian@gmail.com>

4 years agoMerge: astbuilder: Adding new nodes makers(assert, method, or, and,...)
Jean Privat [Thu, 9 May 2019 15:10:28 +0000 (11:10 -0400)]
Merge: astbuilder: Adding new nodes makers(assert, method, or, and,...)

Adding new nodes creation services.
Signed-off-by: Florian Deljarry <deljarry.florian@gmail.com>

Pull-Request: #2745
Reviewed-by: Jean Privat <jean@pryen.org>

4 years agoastbuilder: Adding new nodes makers(assert, method, or, and,...)
Florian Deljarry [Fri, 12 Apr 2019 21:28:52 +0000 (17:28 -0400)]
astbuilder: Adding new nodes makers(assert, method, or, and,...)

Signed-off-by: Florian Deljarry <deljarry.florian@gmail.com>

5 years agonitunit: do not write empty testsuites in the xml file
Jean Privat [Fri, 1 Mar 2019 12:56:46 +0000 (07:56 -0500)]
nitunit: do not write empty testsuites in the xml file

Signed-off-by: Jean Privat <jean@pryen.org>

5 years agotests.sh: run junit2html to render xml files
Jean Privat [Fri, 1 Mar 2019 02:19:01 +0000 (21:19 -0500)]
tests.sh: run junit2html to render xml files

Signed-off-by: Jean Privat <jean@pryen.org>

5 years agogitlab-ci: add nitmetrics job
Jean Privat [Fri, 1 Mar 2019 02:16:33 +0000 (21:16 -0500)]
gitlab-ci: add nitmetrics job

Signed-off-by: Jean Privat <jean@pryen.org>

5 years agogitlab-ci: add valgrind job
Jean Privat [Fri, 1 Mar 2019 02:16:15 +0000 (21:16 -0500)]
gitlab-ci: add valgrind job

Signed-off-by: Jean Privat <jean@pryen.org>

5 years agoMerge: CI: macOS jobs for Gitlab CI
Jean Privat [Fri, 1 Mar 2019 00:08:49 +0000 (19:08 -0500)]
Merge: CI: macOS jobs for Gitlab CI

Add 3 CI jobs for macOS, equivalent to `build_tools`, `test_some` and `test_full_nitcs`. They are executed by a shell executor on a macOS host, Nit Gitlab repos should have a such a runner with the tag `macos`. The new jobs are similar enough to the GNU/Linux versions that they can share the same script.

This PR also fixes 3 problems with macOS portability:

* Workaround for the error with kqueue on libevent and nitcorn clients.

* Set `sed -E` explicitly in `check_manpages.sh` for portability with macOS.

* Download bdwgc in the CI docker image, to prevent `test_full_nitcs_macos` to fail on `hello_ios` because it downloads bdwgc at compilation and prints to the test output. This will require regenerating the official Docker image.

Pull-Request: #2743
Reviewed-by: Jean Privat <jean@pryen.org>

5 years agoMerge: ci: nitlang/nit-ci docker image runs in UTF8
Jean Privat [Fri, 1 Mar 2019 00:08:47 +0000 (19:08 -0500)]
Merge: ci: nitlang/nit-ci docker image runs in UTF8

Or else gradle fails with an exception

Pull-Request: #2742
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>

5 years agoMerge: Moving the astvalidation module in astbuilder
Jean Privat [Fri, 1 Mar 2019 00:08:46 +0000 (19:08 -0500)]
Merge: Moving the astvalidation module in astbuilder

The astvalidation module has been moved into the astbuilder, as both are always used together.

Signed-off-by: Florian Deljarry <deljarry.florian@gmail.com>

Pull-Request: #2741
Reviewed-by: Jean Privat <jean@pryen.org>

5 years agoMerge: Java FFI: use class NitObject for references to Nit objects from Java
Jean Privat [Fri, 1 Mar 2019 00:08:44 +0000 (19:08 -0500)]
Merge: Java FFI: use class NitObject for references to Nit objects from Java

This PR improves the type safety of the Java FFI and fixes a bug with pointers to Nit objects at the same time.

* The main change is the introduction of the Java class `NitObject` used as a general type for Nit objects referenced from Java code. It replaces the use of a simple `int` holding the pointer value, which was the source of the Java FFI bug.

* Change internal pointers to Nit object to use the Java primitive types `long` instead of `int`, addressing to the same pointer bug. Only low-level services should still use `long` this way, in this case it is the support for Android that relies mostly on the FFI with C.

* Change the annotation `extra_java_files` to accept the full name of Java classes (package + class) instead of the path to the Java source file. The compile still looks for the file in the same directory as the Nit module.

* Clear up the documentation of the class `ExternFile` for `filename` to be relative to the compilation folder. This required updating previous usages.

Pull-Request: #2740
Reviewed-by: Jean Privat <jean@pryen.org>

5 years agoci: nitlang/nit-ci docker image runs in UTF8
Jean Privat [Thu, 28 Feb 2019 13:51:24 +0000 (08:51 -0500)]
ci: nitlang/nit-ci docker image runs in UTF8

Signed-off-by: Jean Privat <jean@pryen.org>

5 years agoci: pre download bdwgc before launching the tests
Alexis Laferrière [Thu, 28 Feb 2019 17:41:57 +0000 (12:41 -0500)]
ci: pre download bdwgc before launching the tests

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

5 years agomisc/check_manpages.sh: add -E option to sed for for macOS compat.
Alexis Laferrière [Thu, 28 Feb 2019 14:04:48 +0000 (09:04 -0500)]
misc/check_manpages.sh: add -E option to sed for for macOS compat.

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

5 years agotests: workaround for 'broken kqueue' error on macOS
Alexis Laferrière [Thu, 28 Feb 2019 00:50:12 +0000 (19:50 -0500)]
tests: workaround for 'broken kqueue' error on macOS

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

5 years agoci: tests for macOS on Gitlab CI
Alexis Laferrière [Wed, 27 Feb 2019 19:09:40 +0000 (14:09 -0500)]
ci: tests for macOS on Gitlab CI

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

5 years agoMoving the astvalidation module in astbuilder
Florian Deljarry [Wed, 27 Feb 2019 16:31:02 +0000 (11:31 -0500)]
Moving the astvalidation module in astbuilder

Signed-off-by: Florian Deljarry <deljarry.florian@gmail.com>

5 years agoJava FFI: Makefile adds the compilation dir to the Java CLASSPATH
Alexis Laferrière [Wed, 27 Feb 2019 16:19:52 +0000 (11:19 -0500)]
Java FFI: Makefile adds the compilation dir to the Java CLASSPATH

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

5 years agotests: test Java on the new Gitlab CI setup
Alexis Laferrière [Tue, 26 Feb 2019 17:52:14 +0000 (12:52 -0500)]
tests: test Java on the new Gitlab CI setup

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

5 years agoandroid: NitActivity and NitService use long to hold pointers
Alexis Laferrière [Tue, 26 Feb 2019 19:46:52 +0000 (14:46 -0500)]
android: NitActivity and NitService use long to hold pointers

Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>